Как я могу добавить каждый вывод подпроцесса в список? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь взять вывод p5, это MAC-адрес, и я хочу сохранить их в списке.

Я знаю, что MAC-адреса печатаются в байтовом типе, но мне не удается получить их в желаемом типе.

p3 = subprocess.Popen(["iw", "dev", displayInt, "station", "dump"], stdout=subprocess.PIPE)

p4 = subprocess.Popen(["grep", "Station"], stdin=p3.stdout,  stdout=subprocess.PIPE)

p5 = subprocess.Popen(["cut", "-f", "2", "-s", "-d", " "], stdin=p4.stdout, stdout=subprocess.PIPE)

for line in iter(p5.stdout.readline,''):
    maclist.append(line.rstrip('\n'))
print(maclist)

Я хотел бы иметь вывод как:

[a1:b2:c3:d4:e5:f6 , a1:b2:c3:d4:e5:f6]

И я получаю следующую ошибку:

TypeError: a bytes-like object is required, not 'str'

1 Ответ

2 голосов
/ 09 мая 2019

Кажется, вы используете Python 3. В Python 3 stdout - это поток байтов.Если вы хотите преобразовать это в строку, добавьте параметр encoding='utf8' к вызову Popen(), например:

p5 = subprocess.Popen(
    ["cut", "-f", "2", "-s", "-d", " "],
    encoding="utf8",
    stdin=p4.stdout,
    stdout=subprocess.PIPE)

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

for line in iter(p5.stdout.readline,''):

Вы можете попробовать это, что короче и проще для понимания:

for line in p5.stdout:
...