Вопрос Как управлять gnome-терминалом из Python scrypt?


Я разрабатываю приложение в PyGtk и хотел бы запустить для него команды gnome-terminal и output.

Затем мой пользователь должен иметь возможность изменять команду или, возможно, игнорировать использование стрелки вверх и т. Д.

Я смог запустить терминал, но не могу решить, как отправлять команды.

Так начинается мое приложение:

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()

5
2018-06-27 21:26


происхождения


Связанный вопрос о переполнении стека - jfs


ответы:


Согласно документам python, вы хотите использовать    Popen.communicate(input=None) http://docs.python.org/2/library/subprocess.html#popen-objects

Я бы рекомендовал вам отредактировать вашу команду с python перед отправкой ее другому процессу. Например, отобразите окно с командой по умолчанию и разрешите пользователю редактировать (или отменять) его перед выполнением. Кроме того, «гном-терминал», вероятно, слишком завышен для этого, «/ bin / bash» должно быть достаточно.

Если это не сработает для вас, вы также можете попробовать это. (в зависимости от того, что вы фактически используете на терминале). Поскольку вы упомянули, что пользователи могут редактировать эту команду, было бы неплохо проверить входные данные перед запуском.

command = ['ls','-l']
output = subprocess.check_output( command )
print( output )

0
2018-06-27 22:37



OP уже использует предложение через response,error=process.communicate() где процесс является примером Popen, "Кроме того, «гном-терминал», вероятно, слишком завышен для этого, «/ bin / bash» должно быть достаточно.«Я думаю, что OP фактически намеренно хочет показать терминал в своем графическом приложении. - gertvdijk
Вы правы @gertvdijk, я хочу, чтобы терминал был встроен в мое приложение. В настоящее время я использую Vte.Terminal, что хорошо, но он не ведет себя точно так же, как gnome-terminal. Например, клавиша delete производит ^ [[3 ~, а стрелка вверх не отображает предыдущую команду. Я также был взволнован тем, что нашел здесь: «gnome-terminal --help-gtk», и решил, что это выполнит эту работу. - Anthony Scaife
@ user936401 Если вы нашли решение, создайте новый ответ. - Lucio
Решение не найдено. - Anthony Scaife


У меня такая же проблема.

Решила его с помощью tmux, благодаря этот ответ (скопировано ниже).

В терминале, который должен получить команду start tmux с идентификатором:

tmux new-session -s MYSES

Отправьте ему команды:

tmux send-keys -t MYSES "ls -l"$'\n'

0
2018-06-05 05:01