Печать выходных строк стандартного вывода подпроцессаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Печать выходных строк стандартного вывода подпроцесса

Сообщение Anonymous »

Я создал простую функцию Python:

Код: Выделить всё

import subprocess
from io import TextIOWrapper

def run_shell_command(command: list, debug: bool = False):
'''
Run shell command

:param command: Shell command
:param debug: Debug mode
:return: Result code and message
'''
try:
process = subprocess.run(
command, check=True, text=True, timeout=5,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
if debug:
for line in TextIOWrapper(process.stdout, encoding='utf-8'):
print(line)
message = 'Shell command executed sucessfully'
return ({'code': 200, 'msg': message, 'stdout': process.stdout})
except subprocess.CalledProcessError as e:
return ({'code': 500, 'msg': e.output})

if __name__ == "__main__":
command = run_shell_command(['ls', '-lah'], True)
print(command)
Когда я запускаю его в режиме отладки, я получаю следующую ошибку:

Код: Выделить всё

Traceback (most recent call last):
File "/tmp/command.py", line 28, in 
command = run_shell_command(['ls', '-lah'], True)
File "/tmp/command.py", line 19, in run_shell_command
for line in TextIOWrapper(process.stdout, encoding="utf-8"):
AttributeError: 'str' object has no attribute 'readable'
При запуске Python 3.9 на сервере Linux мне хотелось бы узнать, можете ли вы подсказать, в чем может быть проблема. При отключенной отладке я получаю правильный текстовый вывод. Спасибо за вашу помощь.
Изменить: судя по комментариям ниже, исправить это довольно просто:

Код: Выделить всё

        if debug:
print(process.stdout.rstrip())
Однако, по моему мнению, принятое решение лучше исходного кода.

Подробнее здесь: https://stackoverflow.com/questions/788 ... nes-output
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»