2010-08-01 70 views
5

我想用一个新的os.execv替换当前进程,这个工作正常,除非你没有任何参数。没有args参数的os.execv

即使我没有参数传递到我想要启动的进程,我该如何调用该函数?

# Works fine, unless the arguments tuple wouldn't exist or be empty 
os.execv('process.exe', ('arg1', 'arg2')) 

回答

6

好吧,要求在IRC之后他们指出,为什么是这样工作的。

第一个参数(arg0)通常是你正在执行的文件名(例如sys.argv [0]),所以第一个参数应该总是文件名。

这解释了为什么参数不是可选的,在IRC上他们说arg0是应用程序认为它的名字是什么。

1

这对我的作品

os.execv('process',()) 

。您确定要process不带参数的工作?

或者尝试EXECL

os.execl('process') 
+0

这将会给一个错误的元组是空的,我(在Python 2.7版),是的,我知道它不带参数,它是一个py2exe软件包。 – 2010-08-02 09:38:49

+0

我使用2.5以便可能是问题。你用execl()试过了吗? – 2010-08-02 09:58:23

+0

似乎execl在幕后使用execv:http://pastebin.com/W1YKpxe7 – 2010-08-03 12:48:41

5

这三个变体可以解决问题:

cmd = '/usr/bin/vi' 
os.execv(cmd, ('',)) 
os.execv(cmd, ['']) 
os.execl(cmd, '') 

一般一个参数列表(sys.argv中)的第一个参数是已经用于调用应用程序的命令。 因此,最好是使用那些之一:

cmd = '/usr/bin/vi' 
os.execv(cmd, (cmd,)) 
os.execv(cmd, [cmd]) 
os.execl(cmd, cmd) 

os.exec* documentation on python.org

+1

这是一个正确的答案,索引0处的参数是程序的名称 – 2014-11-07 12:25:08