【问题标题】:'parted mklabel' raises an error through Python subprocess'parted mklabel' 通过 Python 子进程引发错误
【发布时间】:2013-01-24 02:39:32
【问题描述】:

我想通过 python 脚本使用 subprocess.Popen 格式化硬盘。 在 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?

我同意输入“是”并且磁盘已格式化。

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

【问题讨论】:

  • 我怀疑 parted 想要访问一个实际的终端,而不仅仅是一个管道。你试过pexpect吗?
  • p.stdin 是一个损坏的管道,这是正常的,因为 Popen 已经从 1 退出(参见测试 1)。为什么会这样,我还是不明白。将看看 pexpect。

标签: python subprocess disk hard-drive


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2011-07-05
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    相关资源
    最近更新 更多