Простой ответ, который я могу придумать, - это заставить Python использовать Popen
для запуска сценария оболочки, подобного:
gnome-terminal --window -e 'ant -Dport=5555 -Dhost=$IP1 -DhubURL=http://192.168.1.113:4444 -Denvironment=*firefox launch-remote-control $HOME/selenium-grid-1.0.8' &
disown
gnome-terminal --window -e 'ant -Dport=5555 -Dhost=$IP2 -DhubURL=http://192.168.1.113:4444 -Denvironment=*firefox launch-remote-control $HOME/selenium-grid-1.0.8' &
disown
# etc. ...
Существует полностью Python способ сделать это, но он уродлив, работает только на Unix-подобных ОС, и у меня нет времени писать код. По сути, subprocess.Popen
не поддерживает его, поскольку предполагает, что вы хотите либо дождаться завершения подпроцесса, либо взаимодействовать с подпроцессом, либо отслеживать подпроцесс. Он не поддерживает случай «просто запусти его и никогда больше не мешай мне».
Способ, который делается в Unix-подобных ОС, заключается в следующем:
- Используйте
fork
для запуска подпроцесса
- У этого подпроцесса
fork
свой собственный подпроцесс
- Пусть процесс внука перенаправит ввод / вывод на
/dev/null
, а затем использует одну из функций exec
, чтобы запустить процесс, который вы действительно хотите запустить (возможно, сможет использовать Popen
для этой части)
- Дочерний процесс завершается.
- Теперь нет никакой связи между бабушкой и дедушкой и внуком, поэтому, если внук завершается, вы не получаете сигнал
SIGCHLD
, а если дедушка завершает работу, он не убивает всех внуков.
Я мог бы быть в деталях, но это суть. Фоновая обработка (&
) и disown
в bash
должны выполнять одно и то же.