Код:Невозможно выполнить команду дд с помощью POPEN в питона
from subprocess import PIPE, Popen
op = Popen("lsblk", shell=True, stdout=PIPE).stdout.read()
print op
a = raw_input("Enter Path of Device to be copied : ",)
b = raw_input("Enter new name for Image : ",)
print a+b
op=Popen("dd if="+a+" of="+b+" bs=512").stdout.read()
print op
op = Popen("fls "+b+"|grep "+c, shell=True, stdout=PIPE).stdout.read()
print op
ar = op.split(" ")
d = ar[1]
op = Popen("istat "+b+" "+d, shell=True, stdout=PIPE).stdout.read()
print op
e = raw_input("Enter new filename")
op = Popen("icat "+b+" "+d+" >> "+e, shell=True, stdout=PIPE).stdout.read()
print op
op = Popen("gedit "+e, shell=True, stdout=PIPE).stdout.read()
print op
Ошибка:
Traceback (most recent call last):
File "a3.py", line 8, in <module>
op=Popen("dd if="+a+" of="+b+" bs=512").stdout.read()
File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception OSError: [Errno 2] No such file or directory
Пожалуйста, помогите, я не знаком с subprocess.Popen
и я новичок в программировании.
Выполнение 'dd' с использованием произвольного ввода пользователем для ввода имен входных и выходных файлов является рискованным. По крайней мере, вы должны напечатать аргументы и заставить пользователя подтвердить, что источник и назначение _really_, что они хотят. Кроме того, использование блока размером 512 байт довольно медленное. Попробуйте 64k; более крупные размеры могут быть немного быстрее, в зависимости от вашего оборудования. –