Как найти строку в выводе subprocess.Popen.communicate - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь найти строку в выходных данных proc.communicate для subprocess.Popen.Мой код выглядит так:

    proc = subprocess.Popen(["./runCommand.sh" +  " -i " + ip + " -c " + cmd], stdout=subprocess.PIPE, shell=True)
    output = proc.communicate()
    p_status = proc.wait()
    if 'someword' in output:
        #dosomething

Кажется, я не могу найти слово, которое я ищу в выводе.Вывод выглядит следующим образом при печати:

(b'blabla someword\blabla\n', None)

Нужно ли преобразовывать это, чтобы найти что-то с "in"?


Редактировать:Спасибо за ваши ответы!Я изменил его на "output [0], но все равно получаю ошибку TypeError: a bytes-like object is required, not 'str' Что я могу сделать здесь? Используйте decode ()?

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Вы получаете оба stdout + stderr в output, поэтому вам нужно проверить if 'someword' in output[0]:

Или еще лучше:

proc = subprocess.Popen(["./runCommand.sh" +  " -i " + ip + " -c " + cmd], stdout=subprocess.PIPE, shell=True)
output, _ = proc.communicate() # or output, err = proc.communicate()
p_status = proc.wait()
if 'someword' in output:
    #dosomething

всегдапроверять документ :

In [7]: subprocess.Popen.communicate?
Signature: subprocess.Popen.communicate(self, input=None)
Docstring:
Interact with process: Send data to stdin.  Read data from
stdout and stderr, until end-of-file is reached.  Wait for
process to terminate.  The optional input argument should be a
string to be sent to the child process, or None, if no data
should be sent to the child.

communicate() returns a tuple (stdout, stderr).  <<<---
File:      /usr/lib/python2.7/subprocess.py
Type:      instancemethod
1 голос
/ 04 июля 2019

Вы получаете кортеж из двух элементов, вы можете использовать in, если у вас есть доступ к первому элементу кортежа:

>>> 'someword' in (b'blabla someword\blabla\n', None)[0]
True

Поэтому вам нужно заменить output на output[0] назаставить ваш код работать.

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