【发布时间】:2020-08-24 13:47:29
【问题描述】:
我正在尝试制作一个 python 脚本,该脚本将使用 dd if=/dev/sda of=/dev/sdb 克隆(ISO 映像)一个 USB 棒到另一个 USB 上
这是我的问题: 我想创建进度条来显示已完成的工作。
我试过了:
- 查看第二个 U 盘的存储空间,但这不起作用,因为 ISO 映像也会扫描未使用的空间
- 通过将
status=progress添加到dd命令,我可以在终端中取得进展,但我不知道如何从python 访问标准输出。我试过subprocess.Popen,run(stdout = PIPE)有和没有shell = True阅读process.stdout和.read()、.read(1)、.readline()或communicate()。没有什么对我有用。 (https://www.endpointdev.com/blog/2015/01/getting-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)
我在 Raspberry 上使用 python 3.7
感谢您的帮助
【问题讨论】:
-
如果您可以提供一些与您正在运行的命令提供相同或相似输出的 python 代码,这将很有用,这样我们就可以帮助您而无需找到 USB
-
您不应该将答案编辑到您的问题中。这就是答案部分的用途。
标签: python python-3.x subprocess pipe