我正在尝试使用我生成的终端中的通信来执行命令。
sitecreate_proc = subprocess.Popen(['gnome-terminal'], stdout=subprocess.PIPE, stdin=subprocess)
out = sitecreate_proc.communicate("pwd")
print out
" out"变量总是空的。
显示终端是必要的。
答案 0 :(得分:1)
gnome-terminal
是一个图形应用程序,likely doesn't use its own standard streams that it got from the parent process。
您需要运行控制台应用程序才能与它们通信 -
命令本身:
>>> subprocess.check_output("pwd")
'/c/Users/Ivan\n'
或交互式shell命令,然后向其发送输入并按Interacting with bash from python
如果您只需要将流数据输出到python
正在使用的同一个控制台,您可以在获取数据时简单地写出数据 - automatically with tee
或手动在适当的时候。
相反,如果您需要在桌面上启动独立的终端仿真器窗口并通过IPC与其进行交互,那完全是另一回事 - 即UI automation,与标准无关控制台流。
The most common way for that in Linux is D-Bus(上一个链接中列出了其他选项)。然而,Ppl报告(截至2012年)that gnome-terminal
doesn't support D-bus and you have to jump through hoops to interact with it。但是有an article on controlling konsole
via D-Bus。
答案 1 :(得分:0)
我记得沟通返回一个元组,
communic()返回一个元组(stdoutdata,stderrdata)
。所以你不能用户沟通(“pwd”)。 gnome-terminal返回,然后尝试获取结果,sitecreate_proc.communicate()[0]
为stroutdate,或sitecreate_proc.communicate()[0]
为stderrdata