来自python文档:
各种exec *()函数采用新程序的参数列表加载到进程中。在每种情况下,这些参数中的第一个被传递以新程序的名称命名而不是作为用户的争论在命令行上键入。为了C程序员,这是argv [0]传递给程序的main()。对于例如os.execv('/ bin / echo',['foo','bar'])仅会在标准输出; foo似乎是忽略。
有人可以帮我理解这一点吗?如果要使用某些参数运行自己的程序,该怎么办?
UNIX,所有这些exec
都来自此,将程序可执行文件与程序名称分开,以便您的进程可以具有任意名称。
第一个参数是将要运行的程序。这必须存在。下一个参数是您运行程序的进程将是什么,argv[0]
中将出现什么,ps
(进程列表)输出中将出现什么。因此,如果我这样做(在C语言中,但它也映射到Python):
execl ("/usr/bin/sleep", "notsleep", "60", NULL);
这将运行程序/usr/bin/sleep
,但在进程列表中将显示为notsleep
。argv[0]
将是notsleep
,argv[1]
(实际参数)将是60。通常,前两个参数是相同的,但并不是必须的。
这就是列表中的第一个参数(貌似)被忽略的原因。它是赋予该过程的名称,
not
该过程的第一个参数。更正确
的方法是:os.execv('/bin/echo', ['echo', 'foo', 'bar'])