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


102

如何从IDLE交互式外壳程序中运行python脚本?

以下引发错误:

>>> python helloworld.py
SyntaxError: invalid syntax

是什么helloworld.py样子?
TerryA

是的,这意味着您的代码出了点问题!
2013年

12
不,不一定。OP可能会python helloworld.py在IDLE Shell窗口中键入内容,但这不起作用。
内德·迪利2013年

在标准解释器中也不起作用。在人们错误地认为解释器提示是命令行提示之前,就已经出现了这个问题。
Terry Jan Reedy 2015年

如果正确回答了您的问题,那么您应该接受Ned Deily的回答。这也将帮助其他开发人员快速找到正确的答案。
克里希纳(Krishna Oza)

Answers:


141

Python3

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

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

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

有关传递全局/局部变量的信息,请参阅https://stackoverflow.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()

预先使用:子流程

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])

2
您能否同时添加带有命令行参数的示例。
ViFI

1
与Python3和提问者不工作没有明确指定Python版本
森卡彻

exec为Python3 添加了
Hugues Fontenelle

35

您可以在python3中使用它:

exec(open(filename).read())

24

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


1
但是您不能传递参数。:(
埃里卡·凯恩2015年

3
不幸的是,不,在传递命令行参数时在IDLE中运行Python文件并不容易。对于IDLE,这样做存在一个长期存在的问题(bugs.python.org/issue5680)。一种测试方法是sys.argv在程序的开始处(例如,在通常的if __name__ == "__main__"样板下)手动初始化。
Ned Deily

这个答案阐明了为什么我们不能使用IDLE shell运行python脚本。感谢@NedDeily
arsho

1
从IDLE 3.7.4开始,您现在可以运行带有参数的模块。使用新的Run-> Run with Customized...命令(快捷键Shift + F5),将打开一个弹出窗口,您可以在其中提供参数。不幸的是,它目前不会记住它们,因此您将在每次运行时将其粘贴。
丹·诺兰


4

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

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


4

最简单的方法

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3

2

例如:

import subprocess

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

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

2
subprocess.call(r'c:\path\to\something.py')对我不起作用。OSError:[WinError 193]%1不是有效的Win32应用程序
Terry Jan Reedy

试试这个import os import subprocess DIR = os.path.join('C:\\','Users','Sergey','Desktop','a.py')subprocess.call(['python',DIR] )
谢尔盖·诺索夫

1

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

import helloworld
exec('helloworld')

1

在IDLE中,以下工作:

import helloworld

我对它为什么起作用并不十分了解,但是它确实起作用。


您正在执行的操作是加载未从Shell运行的模块。两者之间的一个区别是:1)加载模块的模块名称
____

这不是运行程序的好方法,因为您实际上是在导入而不是在运行它。它的内容将被导入,如果您不想使用它们,它将毫无意义。
Abhijeet.py,

1

要在python外壳程序(例如Idle)或Django外壳程序中运行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。有关详细信息,请参见compileexec文档。


1

我对此进行了测试,并且可以解决:

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

感谢您的报价提示,这对我有用。已投票。
永远的学习者

1

你可以通过两种方式做到

  • import file_name

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

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


0

在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

导入程序以运行它不是一个好选择。甚至我一开始都使用过它,但是现在我知道了潜在的问题,例如由于导入了它而使程序失去了效率(尽管可以忽略不计)。
Abhijeet.py

0

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

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

0

在python控制台中,可以尝试以下2种方法。

在同一个工作目录下

1. >>导入helloworld

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

>> helloworld.x

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

>> helloworld.func()

2. >> runfile(“ ./ helloworld.py”)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.