我想在Python Shell中运行一个命令来执行带参数的文件。
例如:execfile("abc.py")
但是如何添加2个参数?
答案 0 :(得分:51)
试试这个:
import sys
sys.argv = ['arg1', 'arg2']
execfile('abc.py')
请注意,当abc.py
完成时,控制权将返回给调用程序。另请注意,abc.py
如果确实已完成,则可以调用quit()
。
答案 1 :(得分:44)
execfile
运行Python文件,但是加载它,而不是脚本。您只能传递变量绑定,而不能传递参数。
如果要从Python中运行程序,请使用subprocess.call
。 E.g。
subprocess.call(['./abc.py', arg1, arg2])
答案 2 :(得分:44)
实际上,我们不想这样做吗?
import sys
sys.argv = ['abc.py','arg1', 'arg2']
execfile('abc.py')
答案 3 :(得分:25)
import sys
import subprocess
subprocess.call([sys.executable, 'abc.py', 'argument1', 'argument2'])
答案 4 :(得分:10)
您将模块加载到当前解释器进程并在外部调用Python脚本时感到困惑。
前者可以通过import
你感兴趣的文件来完成。execfile类似于导入,但它只是评估文件而不是创建一个模块。类似于shell脚本中的“sourcing”。
后者可以使用子进程模块完成。你产生了解释器的另一个实例,并传递你想要的任何参数。这类似于使用反引号在shell脚本中进行shelling。
答案 5 :(得分:7)
对于更有趣的场景,您还可以查看runpy
模块。从python 2.7开始,它具有run_path
函数。 E.g:
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__')
答案 6 :(得分:5)
您无法使用execfile()
传递命令行参数。请改为subprocess
。
答案 7 :(得分:1)
如果在要执行的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']
答案 8 :(得分:0)
除subprocess.call
外,您还可以使用subprocess.Popen
。如下所示
subprocess.Popen(['./script', arg1, arg2])
答案 9 :(得分:0)
如果您想并行运行脚本并为它们提供不同的参数,您可以执行以下操作。
import os
os.system("python script.py arg1 arg2 & python script.py arg11 arg22")
答案 10 :(得分:0)
这有效:
subprocess.call("python abc.py arg1 arg2", shell=True)
答案 11 :(得分:0)
runfile('abc.py', ['arg1', 'arg2'])