Запуск вторичного скрипта в новом терминале

При запуске вторичного скрипта python:

  • Возможно ли запустить subprocess.Popen или subprocess.call или даже execfile в новом терминале? (как в просто другом терминале, чем в текущем терминале, где выполняется сценарий).
  • В качестве альтернативы, если перед запуском моей программы (основной) я сначала открываю два терминала, могу ли я затем указать вторичный скрипт на второй терминал? (поэтому каким-то образом получить идентификатор открытых терминалов, а затем использовать определенный из них для выполнения подпроцесса).

Например, два подпроцесса, которые нужно запустить, first.py следует вызывать сначала, только тогда вызывается second.py . second.py . Поскольку два сценария first.py и second.py являются взаимозависимыми (как в first.py переходит в режим ожидания, пока не second.py , тогда first.py возобновляет работу, и я не знаю, как заставить эту связь работать между их с точки зрения подпроцессов.)

 import subprocess command = ["python", "first.py"] command2 = ["python", "second.py"] n = 5 for i in range(n): p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) p2 = subprocess.Popen(command2, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) while True: output = p.stdout.readline().strip() print output if output == 'stop': print 'success' p.terminate() p2.terminate() break 

Framework (Ubuntu, python 2.7)

  • Как сериализовать объекты db.Model для json?
  • Как подделать / проксировать класс в Python
  • Есть ли у Python анонимные классы?
  • Как вы НЕ автоматически разыгрываете db.ReferenceProperty в Google App Engine?
  • Подготовить строку к началу файла
  • Selenium webdriver не может найти элементы в chrome: // загружает
  • TypeError: объект 'dict' не может быть вызван
  • Словарь с однократной записью?
  • 3 Solutions collect form web for “Запуск вторичного скрипта в новом терминале”

    Я думаю, вы хотите что-то вроде

     subprocess.call(['xterm','-e','python',script]) 

    У хорошего старого xterm почти нет излишеств; в системе Freedesktop, возможно, вместо этого запустите xdg-terminal . На Debian попробуйте x-terminal-emulator .

    Однако, чтобы ваша программа требовала X11, в большинстве случаев ошибка. Лучшее решение – запустить подпроцессы с выходом в файл журнала (или сокет или что-то еще), а затем отдельно запустить tail -f в этих файлах (в другом терминале или с другого сервера поверх ssh или с выходом на регистратор, который поддерживает rsyslog , или или или …), который сохраняет вашу программу простой и модульной, свободной от «удобных» зависимостей.

    Если вы используете tmux , вы можете указать, для какой цели вы хотите запустить команду:

     tmux send -t foo.0 ls ENTER 

    Итак, если вы создали сеанс tmux foo.0 , вы должны уметь:

     my_command = 'ls' tmux_cmd = ['tmux', 'send', '-t', 'foo.0', my_command] p = subprocess.Popen(tmux_cmd) 

    Вы можете указать tty окна терминала, в котором вы хотите выполнить команду:

     ls > /dev/ttys004 

    Тем не менее, я бы рекомендовал перейти к подходу tmux для большего контроля (см. Мой другой ответ).

    Interesting Posts

    Самый простой способ сохранить структуру данных в файле в python?

    Do dicts сохраняют порядок итераций, если они не изменены?

    Python: передача параметров по имени вместе с kwargs

    Python: requests.exceptions.ConnectionError. Максимальное количество попыток превышено с помощью URL-адреса

    Принудительно / убедитесь, что атрибуты класса python имеют определенный тип

    Python ImportError не может импортировать urandom. Обновление Ubuntu 12.04

    Сохранение matplotlib.animation выводит 0-секундное видео

    Как запустить сервер ipython для ноутбука при загрузке в качестве демона

    Конечные разностные функции на языке Python?

    Отправьте сообщение «304 Not Modified» для изображений, хранящихся в хранилище данных

    Эмулировать цикл do-while в Python?

    Использование Google OAuth2 с Flask

    Отправить данные в реальном времени клиенту с juggernaut

    Данные и гистограмма не сталкиваются в matplotlib?

    Python добавляет несколько файлов в заданном порядке в один большой файл

    Python - лучший язык программирования в мире.