2013-05-20 64 views
0
[[email protected] root]$ cat test.c 
#include <stdio.h> 
int main(int argc, char*argv[]){ 
system("/bin/sh"); 
} 

[[email protected] root]$ cat auto 
#!/usr/bin/env python 
subprocess.Popen(['/root/test']) 

我想使用子進程執行新的shell命令行蟒子模塊不能執行shell

但它立即關閉,我不知道爲什麼..

我應該做的繼續新的shell命令行?

,如果有另一種方法做同樣的事情,而不是子模塊,請讓我知道:)

對不起,我的英語

回答

1

subprocess需求不佳將要導入:

#!/usr/bin/env python 
import subprocess 
subprocess.Popen(['/root/test']) 
1

我假設你通過在一些GUI中而不是從命令行雙擊它來運行你的Python腳本(因爲從shell中打開/bin/sh非常沒用)。這導致您不會看到NameErrorsubprocess未定義,因爲您忘記了導入它。

修復這不會解決您的問題,但。

首先,認識到你的C程序是多餘的;你可以直接通過subprocess.Popen直接啓動/bin/sh。但是如果你是這樣做的,就像我猜測的那樣,從GUI運行你的腳本,你不會得到一個帶有運行在其中的shell的新終端窗口; /bin/sh將意識到它不在TTY上運行並立即退出。

相反,你可能想要做的是啓動一個新的終端,讓它運行你的shell。你如何做到這一點取決於什麼終端,你正常使用,但這裏的,如果你正在使用的xterm這樣做的一種可能的方式(其他常見端子包括GNOME終端konsole的或):

#!/usr/bin/env python 

import os 

os.execv('/usr/bin/xterm', ['xterm']) 

(你會想使用os.execv而不是subprocessos.system,因爲這使得新終端取代了Python進程,而不是像它的孩子一樣毫無意義地運行。)