我正在 PyGtk 中开发一个应用程序,并想启动一个 gnome-terminal 并向其输出命令。
我的用户应该能够修改命令,或者忽略使用向上箭头......等等。
我已经能够启动终端,但不知道如何发送命令。
我的应用程序的启动方式如下:
class App(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
process=subprocess.Popen(["gnome-terminal", "--class=App", "--name=app"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
response,error=process.communicate()
答案1
根据 python 文档,你想使用
Popen.communicate(input=None)
http://docs.python.org/2/library/subprocess.html#popen-objects
我建议您在将命令发送到另一个进程之前先从 python 编辑命令。例如,显示一个带有默认命令的窗口,并允许用户在执行之前编辑(或取消)它。此外,“gnome-terminal”可能对此来说有点过分,“/bin/bash”应该就足够了。
如果这对您不起作用,您也可以尝试这个。(取决于您实际从终端运行的内容)由于您提到用户可以编辑命令,所以在运行之前验证输入是个好主意。
command = ['ls','-l']
output = subprocess.check_output( command )
print( output )
答案2
我有同样的问题。
使用 tmux 解决了这个问题,感谢这个答案(复制如下)。
在应接收命令的终端中,使用标识符启动 tmux:
tmux new-session -s MYSES
使用以下命令向其发送命令:
tmux send-keys -t MYSES "ls -l"$'\n'