Сохранение вывода в файл в Python - PullRequest
0 голосов
/ 27 сентября 2018

Требуется целый день, чтобы понять, почему это не работает.Это с Python 3.6.

Цель состоит в том, чтобы захватить прогресс из командной строки, крошка в качестве примера.Шред будет выводить построчно прогресс.

При использовании подпроцесса Python невозможно сохранить какой-либо вывод в файл.Я сделал это:

   cmd_str="sudo shred -v /dev/sde"
   f="/test.log"

   with Popen(cmd_str, stdout=f, bufsize=1, universal_newlines=True) as p:
       for line in p.stdout:
           print(line, end='') 

Но он выдал ошибку, говорящую: FileNotFoundError: [Errno 2] Нет такого файла или каталога: 'sudo shred -v / dev / sde': 'sudo shred -v / dev/ sde ', который не имеет смысла для меня.

Проще говоря, я хочу добавить новую строку вывода в файл и закрыть его.Таким образом, внешняя программа может проверить файл журнала, чтобы увидеть, как идет работа.

Я только что заметил, что когда я использую tee, чтобы увидеть, регистрируется ли он, и он не входит в файл, несмотря на создание файла журнала.

ОБНОВЛЕНИЕ: Я испробовал все возможные решения на этом сайте, но ничего не получалось.Я начинаю думать, связано ли это с тем фактом, что это индикатор выполнения, который нельзя отправить на стандартный вывод?Они были опробованы и пока не работали:

оперативный вывод команды подпроцесса

Постоянная печать вывода подпроцесса во время выполнения процесса

1 Ответ

0 голосов
/ 27 сентября 2018

Разделение ваших токенов определенно рекомендуется, и вам, вероятно, придется использовать shell=True, чтобы получить sudo для получения:

   cmd_str="sudo shred -v /dev/sde"
   f="/test.log"

   with Popen(cmd_str.split(), shell=True, stdout=open(f, 'w'), bufsize=1, universal_newlines=True) as p:
       for line in p.stdout:
           print(line, end='')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...