在Python shell中使用参数执行一个文件
我想在Python Shell中运行一个命令来执行一个带有参数的文件。
例如: execfile("abc.py")
但如何添加2个参数?
execfile
运行一个Python文件,但加载它,而不是一个脚本。 你只能通过variables绑定,而不是参数。
如果你想从Python中运行一个程序,使用subprocess.call
。 例如
subprocess.call(['./abc.py', arg1, arg2])
尝试这个:
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')
import sys import subprocess subprocess.call([sys.executable, 'abc.py', 'argument1', 'argument2'])
你很难把模块加载到当前的解释器进程中,并从外部调用一个Python脚本。
前者可以通过import
你感兴趣的文件来完成。execfile与导入类似,但是它只是简单的评估文件,而不是创build一个模块。 类似于shell脚本中的“sourcing”。
后者可以使用subprocess模块完成。 你从另一个解释器实例中产生并传递你想要的任何参数。 这与使用反引号在shell脚本中进行炮击类似。
你不能用execfile()
传递命令行参数。 看看subprocess
。
对于更有趣的场景,你也可以看看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])