10

来自 python 文档:

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

有人可以帮我理解吗?如果我想用一些参数运行我自己的程序,我需要做什么?

4

1 回答 1

21

UNIX 是所有这些exec东西的来源,它将程序可执行文件与程序名称分开,因此您的进程可以具有任意名称。

第一个参数是要运行的程序。这必须存在。下一个参数是运行程序的进程将被调用,将在 中argv[0],以及在ps(进程列表)输出中出现的内容。

所以,如果我这样做了(在 C 中,但它也映射到 Python):

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

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

这就是为什么列表的第一个参数(似乎)被忽略的原因。它是过程的名称,而不是它的第一个参数。

一个更正确的方法是:

os.execv('/bin/echo', ['echo', 'foo', 'bar'])
于 2010-05-25T11:52:58.327 回答