在Python shell中执行带参数的文件

时间:2011-04-26 10:18:12

标签: python shell

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

例如:execfile("abc.py")但是如何添加2个参数?

12 个答案:

答案 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'])