2015-04-02 2 views
0

Справочной информации: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?

+0

Попробуйте использовать pexpect, я не думаю, что подпроцесс может делать такие вещи. – matsjoyce

+0

Почему вы не можете использовать API-интерфейс Python (модуль импорта, функции вызова) вместо управления кли-приложением? почему вы устанавливаете 'stdin = PIPE', если вы ничего не пишете в трубе. Почему вы устанавливаете 'stderr = PIPE', если вы его не читаете? Приведите пример успешного взаимодействия с 'yowsup-cli' (вручную). [Читать дискуссию (включая ссылки в комментариях)] (http://stackoverflow.com/q/28616018/4279) – jfs

ответ

0

"sudo /home/pi/yowsup/yowsup-cli demos --yowsup --config /home/pi/yowsup/config", here --yowsup запускает интерактивный клиент, ожидающий ввода. Вы не можете получить вывод, пока он не закончит работу.
Также убедитесь, что yowsup-cli исполняется или запускается как python yowsup-cli.
yowsup-cli не имеет возможности получать сообщения. Вы должны import yowsup и использовать библиотеку для получения сообщений.

Смежные вопросы