0
[root@localhost root]$ cat test.c
#include <stdio.h>
int main(int argc, char*argv[]){
system("/bin/sh");
}

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

我想使用子进程来执行新的 shell 命令行

但它立即关闭我不知道为什么..

我应该怎么做才能继续使用新的 shell 命令行?

如果有另一种方法来做同样的事情而不是子流程模块,请告诉我:)

对不起我糟糕的英语

4

2 回答 2

1

subprocess需要导入:

#!/usr/bin/env python
import subprocess
subprocess.Popen(['/root/test'])
于 2013-05-20T04:12:40.627 回答
1

我假设您通过在某个 GUI 中而不是从命令行中双击它来运行您的 Python 脚本(因为/bin/sh从 shell 中打开是非常无用的)。这导致您看不到该NameError说法subprocess未定义,因为您忘记导入它。

但是,修复它并不能解决您的问题。

首先,意识到你的 C 程序是多余的;你可以直接/bin/sh开始subprocess.Popen。但是如果你这样做,正如我猜测的那样,从 GUI 运行你的脚本,你最终不会得到一个运行 shell 的新终端窗口。/bin/sh将意识到它没有在 TTY 上运行并立即退出。

相反,您可能想要做的是启动一个新终端,然后让它运行您的 shell。如何做到这一点取决于您通常使用的终端,但如果您使用的是 xterm(其他常见终端包括 gnome-terminal 或 konsole),这里有一种可能的方式:

#!/usr/bin/env python

import os

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

(你会想要使用os.execv而不是来自subprocessor的东西os.system,因为这会使新终端替换Python 进程,而不是作为它的子进程毫无意义地运行。)

于 2013-05-20T04:27:06.513 回答