Как получить два процесса Python, говорящих по каналам? - PullRequest
0 голосов
/ 11 августа 2010

У меня проблемы с тем, чтобы заставить это работать. В основном у меня есть программа на python, которая ожидает некоторые данные в stdin, которая читает их как sys.stdin.readlines (). Я проверил это, и он работает без проблем с такими вещами, как echo "" | myprogram.py

У меня есть вторая программа, которая с помощью модуля подпроцесса вызывает первую программу со следующим кодом

    proc = subprocess.Popen(final_shell_cmd,
                stderr=subprocess.PIPE, stdout=subprocess.PIPE,
                shell=False), env=shell_env)
    f = ' '.join(shell_cmd_args)
    #f.append('\4')
    return proc.communicate(f)

Вторая программа - это демон, и я обнаружил, что вторая программа работает хорошо, пока я нажимаю ctrl-d после вызова из первой программы.

Так что, похоже, что-то не так с подпроцессом, не закрывающим файл, и моя первая программа ожидала большего ввода, когда больше ничего не должно отправлять.

Кто-нибудь знает, как я могу заставить это работать?

Основная проблема здесь заключается в том, что «shell_cmd_args» может содержать пароли и другую конфиденциальную информацию, которую мы не хотим передавать в качестве имени команды, как это будет отображаться в таких инструментах, как «ps».

1 Ответ

2 голосов
/ 11 августа 2010

Вы хотите перенаправить стандартный ввод подпроцесса, поэтому вам нужно stdin=subprocess.PIPE.

. Вам не нужно писать Control-D ('\4') для объекта файла.Control-D говорит оболочке закрыть стандартный вход, подключенный к программе.Программа не видит символ Control-D в этом контексте.

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