Я пытаюсь выполнить операцию копирования файла с помощью dd
под Windows. Код прост. Просто откройте команду, используя подпроцесс, и прочитайте stderr
. Затем обработайте stderr
, чтобы показать ход выполнения операции. Вот пример/простой код, который я пытаюсь выполнить: -Невозможно обработать подпроцесс python stderr на окнах
import time
import signal
import subprocess
import os
def dd_win():
windd = "dd.exe"
in_file = os.path.join("E:", "test-in.iso")
out_file = os.path.join("E:", "test-out.iso")
parameter1 = "if=" + in_file
parameter2 = "of=" + out_file
parameter3 = "bs=1M"
parameter4 = "--progress"
command = [windd, parameter1, parameter2, parameter4]
print command
dd_process = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, bufsize=0)
while dd_process.poll() is None:
time.sleep(.1)
line = dd_process.stderr.readline()
if not line:
break
print ">>>>>", line.strip()
if dd_process.poll() is not None:
print "Process finished."
dd_win()
Вот что я получил в качестве выхода. Я мог видеть stderr
, но не смог обработать передачу байтов для преобразования в мега байт: -
C:\Users\user\Documents>python test.py
['dd.exe', 'if=E:test-in.iso', 'of=E:test-out.iso', '--progress']
>>>>> rawwrite dd for windows version 0.6beta3.
>>>>> Written by John Newbigin <[email protected]>
>>>>> This program is covered by terms of the GPL Version 2.
>>>>>
175,882,240 # <--- Problem output line. Unable to assign to other variable for progress calculation
Process finished.
На самом деле я не знаю, где число как. Это от stderr
или буфера? Если это от stderr
, то перед цифрами следует напечатать «>>>>>». Я работаю в Windows 7 и использую версию Windows dd.
Любая помощь приветствуется.
Если вы удаляете операторы печати из своего кода, появляется ли '175,882,240'? Можете ли вы перенаправить stdout и stderr из вашей программы в файлы, чтобы вы могли видеть, какой поток «175,882,240» исходит? –
Если я удалю 'print" >>>>> ", line.strip()' statement, то я не вижу никакого вывода на экране. –
Если вы запустили команду dd в своем терминале, вы видите напечатанную «175,882,240», или это только при ее выполнении в Python? – skrrgwasme