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

相關問題