Вывести заданный вывод в подпроцесс - PullRequest
0 голосов
/ 10 июля 2019

Я хочу напечатать указанный вывод в подпроцессе. Вот мой код:

from subprocess import check_output

output = check_output(['python3', 'code.py']).decode('ascii')
print(output)

Вывод:

Tom
John

Как можно распечатать только Tom или просто John вместо них обоих?Я пытался print(output[0]) напечатать Tom, но получаю только T.

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

У вас есть одна строка, и вы можете использовать функцию любой строки.

Вы можете разделить его и создать список со строками

lines = output.split('\n')

, а затем отобразить только первую строку

print(lines[0])
1 голос
/ 10 июля 2019

Давайте посмотрим на шаги, которые вы уже сделали:

  1. Вы вызываете check_output() и он возвращает вывод в виде байтов ;
  2. Затем Вы вызываете bytes.decode(), что возвращает str .

В результате вы получаете многострочную строку.Вы пытались получить доступ к первой строке, используя индекс 0, но вместо первой строки вы получили первый символ.Это произошло, потому что доступ к строке по индексу вернет вам символ из этого индекса.

Чтобы получить первую строку, вы должны разбить строки вашей многострочной строки (преобразовать str в список str).Есть встроенная функция str.splitlines(), которая делает то, что вам нужно.


Итак, чтобы обновить ваш код, нам нужно добавить еще одну строку перед вашим оператором print():

output_lines = output.splitlines()

После этого вы можете получить доступ к строке по индексу:

print(output_lines[0])
...