Как запомнить значение в переменную при вызове subprocess

Есть код

topic = "asde"
commandlisten = ("echo", ""+topic+"")
try:
    commandOutput = subprocess.run(commandlisten, timeout=1) 
    print (commandOutput)
except subprocess.TimeoutExpired:
    print ('asd')

при его выполнении выводит

asde
CompletedProcess(args=('echo', 'asde'), returncode=0)

как сохранить вывод командной строки в переменную то есть переменная commandOutput была равна asde


Ответы (1 шт):

Автор решения: mrEvgenX

Надо использовать subprocess.Popen и subprocess.Popen.communicate.

import subprocess

args = ["echo", "asde"]
process = subprocess.Popen(args, stdout=subprocess.PIPE)
data = process.communicate(timeout=1)
print(data[0].decode('utf-8'))

Метод communicate позволит нам связываться с созданным нами процессом. Говорят, можно даже передать процессу ввод. После того, как процесс завершится, в data будет кортеж, состоящий из двух элементов - содержимое stdout и stderr, бинарной строкой.

→ Ссылка