os.exec *的第一个参数

问题描述 投票:9回答:1

来自python文档:

各种exec *()函数采用新程序的参数列表加载到进程中。在每种情况下,这些参数中的第一个被传递以新程序的名称命名而不是作为用户的争论在命令行上键入。为了C程序员,这是argv [0]传递给程序的main()。对于例如os.execv('/ bin / echo',['foo','bar'])仅会在标准输出; foo似乎是忽略。

有人可以帮我理解这一点吗?如果要使用某些参数运行自己的程序,该怎么办?

python exec command-line-arguments
1个回答
19
投票

UNIX,所有这些exec都来自此,将程序可执行文件与程序名称分开,以便您的进程可以具有任意名称。

第一个参数是将要运行的程序。这必须存在。下一个参数是您运行程序的进程将是什么,argv[0]中将出现什么,ps(进程列表)输出中将出现什么。因此,如果我这样做(在C语言中,但它也映射到Python):

execl ("/usr/bin/sleep", "notsleep", "60", NULL);

这将运行程序/usr/bin/sleep,但在进程列表中将显示为notsleepargv[0]将是notsleepargv[1](实际参数)将是60。通常,前两个参数是相同的,但并不是必须的。

这就是列表中的第一个参数(貌似)被忽略的原因。它是赋予该过程的名称,

not

该过程的第一个参数。

正确

的方法是:
os.execv('/bin/echo', ['echo', 'foo', 'bar'])
© www.soinside.com 2019 - 2024. All rights reserved.