一尘不染

使用os.execlp时,为什么`python`需要`python`作为argv [0]

linux

代码是这样的:

os.execlp('python', 'python', 'child.py', #other args#)  # this works

os.execlp('python', 'child.py', #other args#)  # this doesn't work

但是我还是很困惑。答案说:

第一个参数是要执行的程序(位于PATH上)。其余的是程序的sys.argv参数。

但是,如果我运行:python child.py 1 2 3并且sys.argv此过程的将会是["child.py", "1", "2", "3"],其中python不存在。那为什么要添加python作为的第二个参数os.execlp呢?


阅读 464

收藏
2020-06-02

共1个答案

一尘不染

执行python时,它将sys.argv为您创建。该列表中的值是 基于 操作系统传递给它的参数的,但它
sys.executable将该列表中的值 保留下来

换句话说,当调用Python时,它将设置sys.argv除其自己的可执行文件之外的所有内容

当通过调用 新的
可执行文件时os.execlp(),您仍然需要包含Python,因为这是操作系统将运行的可执行文件。os.execlp()无论sys.argv以后如何查找,仍然需要传递通行证的前两个值。

2020-06-02