os.exec *的第一个参数

时间:2010-05-25 11:41:52

标签: python exec command-line-arguments

来自python docs:

  

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

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

1 个答案:

答案 0 :(得分:18)

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

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

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

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

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

这就是为什么你列出的第一个参数(貌似)被忽略了。它是给进程的名称,不是它的第一个参数。

更多正确的方法是:

os.execv('/bin/echo', ['echo', 'foo', 'bar'])