[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命令行?
如果还有其他方法可以做同样的事情而不是子进程模块,请告诉我:)
抱歉我的英语很差答案 0 :(得分:1)
subprocess
需要导入:
#!/usr/bin/env python
import subprocess
subprocess.Popen(['/root/test'])
答案 1 :(得分:1)
我假设您通过在某个GUI中双击而不是从命令行运行Python脚本(因为从shell中打开/bin/sh
是非常无用的)。这导致您没有看到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
而不是来自subprocess
或os.system
的内容,因为这会使新终端替换 Python进程而不是作为孩子,他毫无意义地奔跑。)