我想在 PythonShell 中运行一个命令来执行带参数的文件。
For example: execfile("abc.py") but how to add 2 arguments?
execfile("abc.py")
使用 execfile()无法传递命令行参数。请查看 subprocess。
execfile()
subprocess
execfile运行一个 Python 文件,但是通过加载它,而不是作为一个脚本。只能传递变量绑定,不能传递参数。
execfile
如果你想在 Python 中运行一个程序,使用 subprocess.call。
subprocess.call
import subprocess subprocess.call(['./abc.py', arg1, arg2])
将模块加载到当前解释器进程和在外部调用 Python 脚本会造成混淆。
前者可以通过 importing 您感兴趣的文件来完成。执行文件类似于导入,但它只是计算文件,而不是从中创建模块。类似于 shell 脚本中的“源代码”。
import
后者可以使用子流程模块完成。您生成解释器的另一个实例,并向其传递任何希望传递的参数。这类似于在 shell 脚本中使用反勾。
import sys import subprocess subprocess.call([sys.executable, 'abc.py', 'argument1', 'argument2'])
试试这个:
import sys sys.argv = ['arg1', 'arg2'] execfile('abc.py')
请注意,当 abc.py结束时,控制将返回给调用程序。还要注意,如果确实完成了,abc.py可以调用 quit()。
abc.py
quit()
事实上,难道我们不想这么做吗?
import sys sys.argv = ['abc.py','arg1', 'arg2'] execfile('abc.py')
对于更有趣的场景,您还可以查看 runpy模块。自 python 2.7以来,它具有 run_path函数。例如:
runpy
run_path
import runpy import sys # argv[0] will be replaced by runpy # You could also skip this if you get sys.argv populated # via other means sys.argv = ['', 'arg1' 'arg2'] runpy.run_path('./abc.py', run_name='__main__')
除了 subprocess.call之外,还可以使用 subprocess.Popen
subprocess.Popen
subprocess.Popen(['./script', arg1, arg2])
如果在要执行的 python 文件中设置 PYTHONINSPECT
PYTHONINSPECT
[repl.py]
import os import sys from time import time os.environ['PYTHONINSPECT'] = 'True' t=time() argv=sys.argv[1:len(sys.argv)]
不需要使用 execfile,您可以像通常一样在 shell 中直接运行带参数的文件:
python repl.py one two 3 >>> t 1513989378.880822 >>> argv ['one', 'two', '3']
如果您想并行运行这些脚本,并给它们提供不同的参数,您可以像下面这样做。
import os os.system("python script.py arg1 arg2 & python script.py arg11 arg22")
这种方法是有效的:
subprocess.call("python abc.py arg1 arg2", shell=True)
runfile('abc.py', ['arg1', 'arg2'])
这对我有用:
import subprocess subprocess.call(['python.exe', './abc.py', arg1, arg2])