Собственно, сабж. В качестве примера и разъяснения приведу ту задачу, которая его передо мной поставила.
Есть рабочий компьютер, на нем Linux Mint. На нем выполняется скрип Python 3 (назовем его check.py), который инициирует два соединения с коммутаторами в сети по телнету (сделал через pexpect), в каждом из них выполняет действия, собирает информацию, а потом в одном из соединений оставляет интерактив, а второе удаляет. Мне захотелось открывать второе окно терминала, в котором окажется интерактив со вторым соединением.
Поскольку я все повторяющиеся действия попрятал в классы, код выглядел примерно так:
from connections import connect_to_switch
switch1 = connect_to_switch('192.168.1.1')
switch2 = connect_to_switch('192.168.2.1')
#Дальше всякие действия с этими соединениями
del switch2
switch1.interact()
То есть мне захотелось новое окно терминала, в котором бы был результат выполнения switch2.interact(), причем мне не хотелось рвать соединение до 192.168.2.1. Но я совсем не понял, как это можно сделать, не совсем понимаю, что для такого результата нужно, и ничего не нашел в гугле. Поэтому решил задачу через дополнительный скрипт:
from connections import connect_to_switch
import subprocess
switch1 = connect_to_switch('192.168.1.1')
switch2 = connect_to_switch('192.168.2.1')
#Дальше всякие действия с этими соединениями
del switch2
subprocess.call("mate-terminal -e '/home/user/script.py {}'".format('192.168.2.1'), shell=True)
switch1.interact()
В скрипте /home/user/script.py, как несложно догадаться, 3 строчки, которые приведены выше уже по два раза.
Какие-то соображения, оказавшиеся в голове, сформулировали уже уточненные вопросы:
- Как можно получить объект, определенный в check.py, и какие параметры для этого нужны?
- Как можно выполнить с ним действие, определенное только в check.py?
- Может быть, можно запустить интерактив по switch2 в самом скрипте (родительском), а потом совместить новое окно терминала с этой сессией? (если да, объясните, пожалуйста, на уровне принципа)
- Если программа в принципе не может выполнить свой код в рамках другого процесса, объясните, пожалуйста, почему.
- По каким темам нужно ликвидировать свою безграмотность, чтобы уметь самому на все эти вопросы ответить?