0
我想通過使用subprocess.Popen的python腳本來格式化硬盤。 在shell中鍵入以下命令可以很好地工作。只要注意這個命令!'parted mklabel'通過Python子進程產生錯誤
parted /dev/sdh mklabel gpt
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No?
我同意輸入Yes並且磁盤格式良好。
在Python子進程內部滾動它,Popen退出,狀態碼爲1. 我甚至無法在stdin管道中寫入'Yes'。
代碼如下:
#test1
from subprocess import Popen, PIPE, STDOUT
p = Popen('parted /dev/sdh mklabel gpt', shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
print p.wait()
或者,
# test2
p = Popen('parted /dev/sdh mklabel gpt', shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
p.stdin.write('Yes\n')
IO錯誤:[錯誤32]破管
我不知道如果POPEN不將此警告視爲錯誤,如果發生這種情況,我怎麼能改變他的行爲? 感謝您的任何建議。
我懷疑parted想要訪問一個實際的終端,而不僅僅是一個管道。您是否嘗試過['pexpect'](http://www.noah.org/wiki/pexpect)? –
p.stdin是一個破損的管道,這是正常的,因爲Popen已經退出了1(見測試1)。爲什麼會發生這種情況,我仍然不明白。將看看pexpect。 – ScotchAndSoda