Справочной информации:Python: подпроцесс не может получить выходы процесса
Я пишу Python приложение, которое будет получать сообщения WhatsApp и выполнять некоторые действия, основанные на предоставленные командах. Для этого я установил yowsup, который также является приложением Python, которое занимается обменом сообщениями WhatsApp.
Стратегия:
Yowsup имеет приятный интерфейс для отправки и получения сообщений, так что моя идея состояла в том, чтобы начать процесс через Popen и иметь дело с стандартного ввода на стандартный вывод и стандартный поток ошибок. Для этого я написал код ниже:
from subprocess import Popen, PIPE
statement = "sudo /home/pi/yowsup/yowsup-cli demos --yowsup --config /home/pi/yowsup/config"
yowsup = Popen(statement.split(" "), stdout=PIPE, stdin=PIPE, stderr=PIPE)
while True:
output = yowsup.stdout.readline()
if output != "":
print output.rstrip()
Выпуск:
код не возвращает никакого сообщения, поэтому я изменил заявление, чтобы проверить, если мой код был штраф:
statement = "ping 192.168.0.9 -c 4"
Bingo! С командой ping
код работает просто отлично.
Мой вопрос:
Почему я не в состоянии справиться с стандартного ввода и стандартный вывод с помощью приложения yowsup и как я могу заставить его работать?
Играет ли она какую-либо роль в том, что yowsup также является приложением Python?
Попробуйте использовать pexpect, я не думаю, что подпроцесс может делать такие вещи. – matsjoyce
Почему вы не можете использовать API-интерфейс Python (модуль импорта, функции вызова) вместо управления кли-приложением? почему вы устанавливаете 'stdin = PIPE', если вы ничего не пишете в трубе. Почему вы устанавливаете 'stderr = PIPE', если вы его не читаете? Приведите пример успешного взаимодействия с 'yowsup-cli' (вручную). [Читать дискуссию (включая ссылки в комментариях)] (http://stackoverflow.com/q/28616018/4279) – jfs