我正在阅读Oreilly的Mark Luze编写的第4版编程python,通过自学。 有一个关于如何分叉子进程的例子,我不太明白:
os.execlp('python', 'python', 'child.py', #other args#)
在一个交互式shell(比如bash)中,我知道我可以输入python child.py #args#
来让python解释器用args运行child.py.
为什么execlp()函数中有两个'python'?如果我在函数中只放了一个python,我会得到一个错误,抱怨无法找到文件或目录,这是child.py的第一个参数
答案 0 :(得分:7)
第一个参数是要执行的程序(在PATH
上找到)。其余的是该程序的sys.argv
参数。
第一个这样的参数是用于调用它的程序名称,以及OS进程列表中使用的显示值。它是python脚本中sys.argv[0]
的值。
答案 1 :(得分:5)
首先,今天很少使用execlp
。在大多数情况下,您可以使用subprocess模块,如下所示:
subprocess.call(['python', 'child.py'])
execlp
的第一个参数是您要执行的文件。
后面的参数构成了该程序的参数数组(Python中的sys.argv
)。第一个参数是程序调用的名称。例如,如果使用'-c'
选项运行程序,Python会将名称设置为-c
。同样,grep的行为会有所不同,具体取决于第一个参数,因此用户可以执行rgrep
来暗示grep -r
。