Можно ли в линуксе передать экземпляр класса из одного процесса в другой и выполнить с ним действия? Собственно, сабж. В качестве примера и разъяснения приведу ту задачу, которая его передо мной поставила.
Есть рабочий компьютер, на нем 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 в самом скрипте (родительском), а потом совместить новое окно терминала с этой сессией? (если да, объясните, пожалуйста, на уровне принципа)Если программа в принципе не может выполнить свой код в рамках другого процесса, объясните, пожалуйста, почему. По каким темам нужно ликвидировать свою безграмотность, чтобы уметь самому на все эти вопросы ответить?

21 Авг 2019 в 06:26
165 +1
0
Ответы
1

В Linux нет прямого способа передать экземпляр класса из одного процесса в другой, так как каждый процесс имеет свое собственное адресное пространство и не имеет доступа к памяти других процессов напрямую. Однако, существуют способы обмена данными между процессами, такие как сокеты, файлы или используя межпроцессное взаимодействие (IPC).

Для вашей конкретной задачи, вам необходимо запустить второй скрипт в новом процессе и передать ему необходимые параметры для создания объекта класса. Вы можете использовать аргументы командной строки для передачи этих параметров.

Чтобы выполнить действие, определенное в check.py в другом процессе, вам необходимо передать объект или данные, с которыми нужно работать, другому процессу и выполнить нужные действия в нем.

Если вы хотите запустить интерактив в новом окне терминала для объекта switch2 из родительского скрипта, вам придется передать данные о текущей сессии или объекте в новый процесс и создать для него новое окно терминала.

Для изучения тем, связанных с межпроцессным взаимодействием в Linux, вам стоит изучить сокеты, взаимодействие через файлы, использование IPC механизмов (например, семафоры, разделяемая память, очереди сообщений) и работу с процессами. Также полезно изучить специфические инструменты для работы с межпроцессным взаимодействием, такие как multiprocessing, subprocess, threading.

20 Апр в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир