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