Я занимаюсь разработкой приложения на PyGtk и хотел бы запустить терминал gnome и вывести на него команды.
Мой пользователь затем сможет изменить команду или, возможно, проигнорировать, используя стрелку вверх ... и т. Д.
Мне удалось запустить терминал, но я не могу понять, как отправлять команды.
Вот как начинается мое приложение:
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()
У меня была такая же проблема.
Решено с помощью tmux, благодаря этому ответу (скопировано ниже).
В терминале, который должен получить команду, запустите tmux с идентификатором:
tmux new-session -s MYSES
Отправьте ему команды с:
tmux send-keys -t MYSES "ls -l"\n'
Согласно документации по Python, вы хотите использовать Popen.communicate(input=None)
http://docs.python.org/2/library/subprocess.html#popen-objects
I рекомендую вам отредактировать вашу команду из python перед отправкой другому процессу. Например, отобразите окно с командой по умолчанию и разрешите пользователю редактировать (или отменять) его перед выполнением. Кроме того, «gnome-Terminal», вероятно, излишне для этого, «/ bin / bash» должно быть достаточно.
Если это не работает для вас, вы также можете попробовать это. (в зависимости от того, что вы в действительности запускаете из терминала) Поскольку вы упомянули, что пользователи могут редактировать команду, было бы неплохо проверить ввод перед запуском.
command = ['ls','-l']
output = subprocess.check_output( command )
print( output )