如何从 Python scrypt 控制 gnome-terminal?

Ant*_*ife 5 python command-line gnome-terminal gtk application-development

我正在 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()
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 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 )
Run Code Online (Sandbox Code Playgroud)

  • OP 已经通过 `response,error=process.communicate()` 使用建议,其中 process 是 `Popen` 的实例。“*另外,“gnome-terminal”对此可能有点过分了,“/bin/bash”应该足够了。*”我认为OP实际上是故意想在他的GUI应用程序中显示终端。 (2认同)

小智 0

我有同样的问题。

用 tmux 解决了这个问题,感谢这个答案(复制如下)。

在应该接收带有标识符的命令启动 tmux 的终端中:

tmux new-session -s MYSES
Run Code Online (Sandbox Code Playgroud)

使用以下命令向其发送命令:

tmux send-keys -t MYSES "ls -l"$'\n'
Run Code Online (Sandbox Code Playgroud)