@aloorpro

Можно ли в линуксе передать экземпляр класса из одного процесса в другой и выполнить с ним действия?

Собственно, сабж. В качестве примера и разъяснения приведу ту задачу, которая его передо мной поставила.
Есть рабочий компьютер, на нем 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 в самом скрипте (родительском), а потом совместить новое окно терминала с этой сессией? (если да, объясните, пожалуйста, на уровне принципа)
  • Если программа в принципе не может выполнить свой код в рамках другого процесса, объясните, пожалуйста, почему.
  • По каким темам нужно ликвидировать свою безграмотность, чтобы уметь самому на все эти вопросы ответить?
  • Вопрос задан
  • 568 просмотров
Решения вопроса 1
lxsmkv
@lxsmkv
Test automation engineer
Одна тема называется [python] interprocess communication,
a другая [python] object serialization
А это наверное ответ на ваш вопрос
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы