Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t Python';s os.exec*函数是否传递任何参数?_Python_Python 3.x - Fatal编程技术网

为什么';t Python';s os.exec*函数是否传递任何参数?

为什么';t Python';s os.exec*函数是否传递任何参数?,python,python-3.x,Python,Python 3.x,我想用一个使用相同Python解释器的新进程替换当前进程,但要使用一个新脚本。我尝试过使用,这似乎是最直观的方法: print(sys.executable, script_path, *args) os.execl(sys.executable, script_path, *args) 结果是,这将被打印到屏幕上(从打印功能): 显示Python没有收到任何参数 如果我复制打印功能的输出并将其输入终端,它将按预期工作。我还尝试过使用execv和execlp,结果相同 为什么execl调用不

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

print(sys.executable, script_path, *args)
os.execl(sys.executable, script_path, *args)
结果是,这将被打印到屏幕上(从
打印
功能):

显示Python没有收到任何参数

如果我复制
打印
功能的输出并将其输入终端,它将按预期工作。我还尝试过使用
execv
execlp
,结果相同


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

arg0、arg1、arg2。。。(系统可执行文件后面的参数)作为argv传递给子程序。如果将
script\u path
作为第一个参数传递,子程序将
script\u path
解释为argv[0],而不是
sys.executable

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

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

你说得对,这很有效。不过,这对我来说没什么意义。我有两个后续问题,如果您能补充您的答案,我将非常高兴#1:是否存在不将可执行文件添加为argv中的第一项的情况?如果不是,为什么不隐式添加#2:为什么Python解释器在我的示例中没有找到参数?我知道它将
script\u path
解释为
argv[0]
,但这并不能解释为什么
sys.argv
[''']
,而不是
[“script.py”,“arg1”,“arg2”,“arg3”
@Hubro,#1,有时,您可能不想公开可执行文件的真实路径。(
ps aux
ps-efl
将显示传递的名称而不是实际路径)@Hubro,#2,
sys.argv
与C中的
argv
不同。Python使用第一项<代码>argv[0]@Hubro,#2,根据python手册:。。。如果可用,脚本名称及其后的附加参数将传递给Python变量sys.argv中的脚本,该变量是字符串列表(必须首先导入sys才能访问它)。如果未给出脚本名称,则sys.argv[0]为空字符串。。。。
>>> import sys
>>> print(sys.argv)
['']
os.execl(sys.executable, sys.executable, script_path, *args)
                         ^^^^^^^^^^^^^^