subprocess.Popenを使用して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?
「はい」と入力して同意します。ディスクは適切にフォーマットされています。
Pythonサブプロセス内でロールすると、Popenはステータスコード1で終了します。stdinパイプに「はい」を書き込むことさえできません。
次のようにコーディングします。
#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()
1
または、
# test2
p = Popen('parted /dev/sdh mklabel gpt', shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
p.stdin.write('Yes\n')
IOError:[Errno32]壊れたパイプ
Popenがこの警告をエラーと見なしていないかどうかはわかりません。その場合、どうすれば彼の動作を変更できますか?提案をありがとう。