0

我想使用 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 退出。我什至无法将“是”写入标准输入管道。

代码如下:

#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 是否不将此警告视为错误,如果是这种情况,我该如何改变他的行为?感谢您的任何建议。

4

1 回答 1

0

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

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