为什么Python的os.exec *函数不会传递任何参数?

时间:2014-08-24 04:52:25

标签: python python-3.x

我想使用相同的Python解释器替换当前进程和新进程,但是使用新脚本。我尝试过使用os.execl,这似乎是最直观的方法:

print(sys.executable, script_path, *args)
os.execl(sys.executable, script_path, *args)

结果是它被打印到屏幕上(来自print功能):

/home/tomas/.pyenv/versions/3.4.1/bin/python script.py arg1 arg2 arg3

启动了Python交互式解释器。将其输入解释器:

>>> import sys
>>> print(sys.argv)
['']

显示Python没有收到任何参数。

如果我复制print功能的输出并将其输入我的终端,它将按预期工作。我也尝试使用execvexeclp,结果相同。


为什么execl调用不将参数传递给Python可执行文件?

1 个答案:

答案 0 :(得分:2)

arg0,arg1,arg2,...(sys.executable之后的参数)作为argv传递给子程序。如果您将script_path作为第一个参数传递,子程序会将script_path解释为argv [0]而不是sys.executable

替换execl行,如下所示将解决您的问题:

os.execl(sys.executable, sys.executable, script_path, *args)
                         ^^^^^^^^^^^^^^