Execute a file with arguments in Python shell

我想在 PythonShell 中运行一个命令来执行带参数的文件。

For example: execfile("abc.py") but how to add 2 arguments?

193949 次浏览

使用 execfile()无法传递命令行参数。请查看 subprocess

execfile运行一个 Python 文件,但是通过加载它,而不是作为一个脚本。只能传递变量绑定,不能传递参数。

如果你想在 Python 中运行一个程序,使用 subprocess.call

import subprocess
subprocess.call(['./abc.py', arg1, arg2])

将模块加载到当前解释器进程和在外部调用 Python 脚本会造成混淆。

前者可以通过 importing 您感兴趣的文件来完成。执行文件类似于导入,但它只是计算文件,而不是从中创建模块。类似于 shell 脚本中的“源代码”。

后者可以使用子流程模块完成。您生成解释器的另一个实例,并向其传递任何希望传递的参数。这类似于在 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()

事实上,难道我们不想这么做吗?

import sys
sys.argv = ['abc.py','arg1', 'arg2']
execfile('abc.py')

对于更有趣的场景,您还可以查看 runpy模块。自 python 2.7以来,它具有 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(['./script', arg1, arg2])

如果在要执行的 python 文件中设置 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])