来自python docs:
各种exec *()函数需要一个 新程序的参数列表 加载到进程中。在每种情况下, 第一个参数被传递 把新程序作为自己的名字 而不是用户可能作为参数 已在命令行上键入。为了 C程序员,这是argv [0] 传递给程序的main()。对于 例如,os.execv('/ bin / echo',['foo', 'bar'])只打印条形图 标准输出; foo似乎是 忽略。
有人可以帮我理解这个吗?如果我想用一些参数运行我自己的程序,我该怎么办?
答案 0 :(得分:18)
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'])