从控制台获取stdout

问题描述 投票:0回答:1

我想做一个python脚本,将一个U盘克隆到另一个U盘上,使用的是 dd if=/dev/sda of=/dev/sdb

我的问题是这样的。我想创建一个进度条来显示所做的事情。

我试过。

  1. 观察第二个U盘的存储空间 但这行不通 因为ISO图像扫描时也有未使用的空间。
  2. 通过添加 status=progressdd 命令,我可以在终端获得进度,但我不知道如何从python中访问stdout。我试过 subprocess.Popen,run(stdout = PIPE) 有无 shell = True阅读 process.stdout.read(), .read(1), .readline()communicate(). 对我来说没有任何作用(https:/www.endpoint.comblog20150128getting-realtime-output-using-python)

我可以看到在python shell中的进展,但是......。.read() 函数总是被卡住。

我所担心的部分代码。

comm = 'sudo dd if=/dev/sda of=/dev/sdb'
cloning = subprocess.Popen(shlex.split(comm),stdout = PIPE,text = True)
while True:
    print(cloning.stdout.read())

我希望能有这样的工作方式

while True:
    progress = cloning.stdout.read()
    update_bar(progress)

我在树莓上使用python 3. 7版本

谢谢你的帮助

python python-3.x subprocess pipe
1个回答
0
投票

你是在正确的轨道上与 status=progress但它输出到stderr,而不是stdout。如果你做 stderr = PIPE 然后从 cloning.stderr 而不是 cloning.stdout,它将工作。

© www.soinside.com 2019 - 2024. All rights reserved.