'parted mklabel'通过Python子进程引发错误

时间:2013-02-08 10:42:08

标签: python subprocess disk hard-drive

我想使用subprocess.Popen通过python脚本格式化硬盘。 在shell中键入以下命令很好。请注意这个命令!

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管道中写“是”。

代码如下:

#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:[Errno 32]管道损坏

我不确定Popen是否不将此警告视为错误,如果是这种情况,我怎么能改变他的行为呢? 感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

通过在命令中添加-s选项,如下所示(忽略输出),parted退出并成功。

Popen('parted -s /dev/sdh mklabel gpt', shell=True)