Многократное общение с подпроцессом

Я пытаюсь передать вход в программу, открытую как подпроцесс в Python. Использование функции communication() делает то, что я хочу, но он делает это только один раз, а затем ожидает завершения подпроцесса, прежде чем разрешить продолжить работу.

Есть ли метод или модуль, подобные функции связи() в функции, но допускает множественную связь с дочерним процессом?

Вот пример:

import subprocess
p = subprocess.Popen('java minecraft_server.jar',
 shell=True,
 stdin=subprocess.PIPE);
//Pipe message to subprocess' console here
//Do other things
//Pipe another message to subprocess' console here

Если это можно сделать проще, без использования подпроцесса, это тоже будет здорово.

1 ответ

Вы можете write до p.stdinflush каждый раз, чтобы убедиться, что данные действительно отправлены) столько раз, сколько хотите. Проблема будет только в том случае, если вы захотите вернуть результаты (так как так сложно убедить другие процессы в не буферизации их вывода!), Но поскольку вы даже не устанавливаете stdout= в вашем классе Popen, что явно не проблема для вас. (Если проблема , и вам действительно нужно победить другую стратегию буферизации вывода процесса, pexpect - или wexpect в Windows - лучшее решение - я рекомендую их очень, очень часто в stackoverflow, но у вас нет URL-адресов прямо сейчас, поэтому PLS просто ищем их самостоятельно , если, вопреки вашему примеру, у вас есть эта потребность).

licensed under cc by-sa 3.0 with attribution.