0

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がこの警告をエラーと見なしていないかどうかはわかりません。その場合、どうすれば彼の動作を変更できますか?提案をありがとう。

4

1 に答える 1

0

次のようにコマンドに-sオプションを追加する(出力を無視する)ことにより、partedは正常に終了します。

Popen('parted -s /dev/sdh mklabel gpt', shell=True)
于 2013-02-12T11:24:27.613 に答える