如何从 IDLE 交互式 shell 运行 python 脚本?

Posted

技术标签:

【中文标题】如何从 IDLE 交互式 shell 运行 python 脚本?【英文标题】:How to run a python script from IDLE interactive shell? 【发布时间】:2013-06-19 07:21:50 【问题描述】:

如何在 IDLE 交互式 shell 中运行 python 脚本?

以下抛出错误:

>>> python helloworld.py
SyntaxError: invalid syntax

【问题讨论】:

helloworld.py 长什么样子? 是的,这意味着你的代码有问题发布你的代码! 不,不一定。可能是 OP 在 IDLE shell 窗口中键入 python helloworld.py 并且不起作用。 它在标准解释器中也不起作用。这个问题在人们错误地认为解释器提示符是命令行提示符之前出现过。 如果 Ned Deily 正确回答了您的问题,您应该接受该回答。这也将帮助其他开发人员快速找出正确答案。 【参考方案1】:

在 python 控制台中,可以尝试以下两种方式。

在同一个工作目录下,

1。 >> 导入你好世界

#如果有变量x,可以在IDLE中打印出来。

>> helloworld.x

#如果有函数func,也可以这样调用。

>> helloworld.func()

2。 >> runfile("./helloworld.py")

【讨论】:

【参考方案2】:

Python3

exec(open('helloworld.py').read())

如果您的文件不在同一个目录中:

exec(open('./app/filename.py').read())

请参阅https://***.com/a/437857/739577 了解传递全局/局部变量。


在已弃用的 Python 版本中

Python2 内置函数:execfile

execfile('helloworld.py')

通常不能用参数调用它。但这里有一个解决方法:

import sys
sys.argv = ['helloworld.py', 'arg']  # argv[0] should still be the script name
execfile('helloworld.py')

自 2.6 起已弃用:popen

import os
os.popen('python helloworld.py') # Just run the program
os.popen('python helloworld.py').read() # Also gets you the stdout

带参数:

os.popen('python helloworld.py arg').read()

提前使用:subprocess

import subprocess
subprocess.call(['python', 'helloworld.py']) # Just run the program
subprocess.check_output(['python', 'helloworld.py']) # Also gets you the stdout

带参数:

subprocess.call(['python', 'helloworld.py', 'arg'])

阅读文档了解详情:-)


用这个基本的helloworld.py测试:

import sys
if len(sys.argv) > 1:
    print(sys.argv[1])

【讨论】:

能否请您也添加一个带有命令行参数的示例。 不适用于 Python3,并且询问者没有明确指定 Python 版本 为 Python3 添加了exec【参考方案3】:

还有另一种选择(适用于 Windows)-

    import os
    os.system('py "<path of program with extension>"')

【讨论】:

【参考方案4】:

在Windows环境下,可以在Python3 shell命令行上执行py文件,语法如下:

exec(open('file_name 的绝对路径').read())

下面解释如何从 python shell 命令行执行一个简单的 helloworld.py 文件

文件位置:C:/Users/testuser/testfolder/helloworld.py

文件内容:print("hello world")

我们可以在 Python3.7 Shell 上执行这个文件,如下所示:

>>> import os
>>> abs_path = 'C://Users/testuser/testfolder'
>>> os.chdir(abs_path)
>>> os.getcwd()
'C:\\Users\\testuser\\testfolder'

>>> exec(open("helloworld.py").read())
hello world

>>> exec(open("C:\\Users\\testuser\\testfolder\\helloworld.py").read())
hello world

>>> os.path.abspath("helloworld.py")
'C:\\Users\\testuser\\testfolder\\helloworld.py'
>>> import helloworld
hello world

【讨论】:

导入一个程序来运行它不是一个好的选择。即使我在开始时使用它,但现在我知道潜在的问题,例如它会因为您正在导入它而降低程序的效率(尽管可以忽略不计)。【参考方案5】:

你可以通过两种方式做到这一点

import file_name

exec(open('file_name').read())

但请确保该文件应存储在您的程序运行的位置

【讨论】:

【参考方案6】:

最简单的方法

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3

【讨论】:

【参考方案7】:

我对此进行了测试,效果不错:

exec(open('filename').read())  # Don't forget to put the filename between ' '

【讨论】:

感谢报价提示,这对我有用。赞成。【参考方案8】:

你可以在python3中使用这个:

exec(open(filename).read())

【讨论】:

【参考方案9】:

要在 Python shell(如 Idle)或 Django shell 中运行 Python 脚本,您可以使用 exec() 函数执行以下操作。 Exec() 执行代码对象参数。 Python 中的代码对象只是编译后的 Python 代码。所以你必须首先编译你的脚本文件,然后使用 exec() 来执行它。从你的外壳:

>>>file_to_compile = open('/path/to/your/file.py').read()
>>>code_object = compile(file_to_compile, '<string>', 'exec')
>>>exec(code_object)

我正在使用 Python 3.4。有关详细信息,请参阅 compile 和 exec 文档。

【讨论】:

【参考方案10】:

在 IDLE 中,以下工作:-

import helloworld

我不太了解它为什么会起作用,但确实如此..

【讨论】:

你正在做的是加载一个没有从 shell 运行的模块。两者之间的一个区别是:1)加载模块您的模块名称 name__= 文件名称 2)从 shell 模块名称 _name__="_main" 运行 这不是运行程序的好方法,因为您实际上是在导入而不是运行它。它的内容将被导入,如果您不想使用它们将毫无意义。【参考方案11】:

在 Python 3 中,没有execFile。可以使用exec 内置函数,例如:

import helloworld
exec('helloworld')

【讨论】:

【参考方案12】:

试试这个

import os
import subprocess

DIR = os.path.join('C:\\', 'Users', 'Sergey', 'Desktop', 'helloword.py')

subprocess.call(['python', DIR])

【讨论】:

【参考方案13】:

例如:

import subprocess

subprocess.call("C:\helloworld.py")

subprocess.call(["python", "-h"])

【讨论】:

subprocess.call(r'c:\path\to\something.py') 对我不起作用。 OSError: [WinError 193] %1 不是有效的 Win32 应用程序 试试这个 import os import subprocess DIR = os.path.join('C:\\', 'Users', 'Sergey', 'Desktop', 'a.py') subprocess.call (['python', DIR])【参考方案14】:

execFile('helloworld.py') 为我完成了这项工作。需要注意的是,如果 .py 文件不在 Python 文件夹本身中(至少在 Windows 上是这种情况),请输入 .py 文件的完整目录名称

例如,execFile('C:/helloworld.py')

【讨论】:

【参考方案15】:

IDLE shell 窗口与终端 shell 不同(例如,运行 shbash)。相反,它就像在 Python 交互式解释器 (python -i) 中一样。在 IDLE 中运行脚本的最简单方法是使用 File 菜单中的 Open 命令(这可能会根据您运行的平台而有所不同)将脚本文件加载到 IDLE 编辑器窗口中,然后使用Run -> Run Module 命令(快捷键 F5)。

【讨论】:

但是你不能传入参数。 :( 不幸的是,不,在传递命令行参数的同时在 IDLE 中运行 Python 文件并不容易。 IDLE 有一个长期存在的未解决问题 (bugs.python.org/issue5680)。测试的一种解决方法是在程序的最开始手动初始化sys.argv,例如,在通常的if __name__ == "__main__" 样板下。 这个答案阐明了为什么我们不能使用 IDLE shell 运行 python 脚本。谢谢@NedDeily 从 IDLE 3.7.4 开始,您现在可以运行带有参数的模块。使用新的 Run -> Run with Customized... 命令(快捷键 Shift+F5),将打开一个弹出窗口,您可以在其中提供参数。不幸的是,它目前不记得它们,所以你每次运行都会粘贴它们。

以上是关于如何从 IDLE 交互式 shell 运行 python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 shell 中重新运行 Python IDLE 中的程序?

从“Hello World”开始

如何从 spark-shell/spark-submit 运行交互式 Spark 应用程序

python 用IDLE能运行 用shell不能运行

Python复习

那能运行Pythonidle的操作系统