我想使用相同的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
功能的输出并将其输入我的终端,它将按预期工作。我也尝试使用execv
和execlp
,结果相同。
为什么execl
调用不将参数传递给Python可执行文件?
答案 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)
^^^^^^^^^^^^^^