Вызов функции в файле Python из другого файла Python - PullRequest
1 голос
/ 18 марта 2012

Я пытаюсь вызвать функцию в файле из другого файла.У меня есть файл с именем client.py.В этом файле есть функция с именем reset (), которая сбрасывает клиента.У меня есть другой файл controller.py, я хочу вызвать client.reset () из контроллера, чтобы он сбрасывал клиента, т. Е. Должен работать в клиенте, а не в контроллере.

Есть ли способ сделать это?

РЕДАКТИРОВАТЬ:

controller.py и client.py работают как отдельные процессы.Метод import импортирует функцию из другого модуля в область файла, в которую он импортируется.Это не то, что я хочу.Мне нужен метод, с помощью которого controller.py может заставить client.py вызывать reset () для себя.

Ответы [ 2 ]

2 голосов
/ 18 марта 2012

Несмотря на то, что некоторые предлагали взаимодействовать с вашими процессами через подпроцесс PIPE, по-прежнему остается проблема, что ваш процесс client.py должен ожидать и прослушивать данные на stdin, чтобы выполнить действие.Непонятно, что делает ваш клиент, но, возможно, он просто сидит в цикле чтения из stdin.

@ mfrankli дал общую ссылку на Python IPC в своем ответе.Но, чтобы быть более конкретным, вам нужен некоторый тип реализации прослушивания в вашем client.py, чтобы контроллер отправлял сообщения.Вот несколько различных подходов:

  1. xmlrpc - Его довольно просто использовать.
  2. Zeromq и привязки pyzmq : если вы хотите намного больше контролировать то, как ваша система будет взаимодействовать, это более надежный вариант.Вы можете использовать шаблон публикации / подписки, чтобы ваши клиенты слушали контроллер.

Если вас интересует маршрут ZeroMQ, у меня на самом деле есть простой проект, который создает настройку RPC, используя его: https://github.com/justinfx/pyRpc

2 голосов
/ 18 марта 2012

Для обмена информацией между подпроцессами вы можете использовать некоторые методы в межпроцессном взаимодействии , согласно предложению @ Sven в комментариях.Если клиенту нужно только взаимодействовать с контроллером, тогда вы захотите использовать трубопровод stdin / stdout.Когда вы вызываете subprocess.Popen (), вам нужно включить stdin = PIPE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...