我想做一个python脚本,将一个U盘克隆到另一个U盘上,使用的是 dd if=/dev/sda of=/dev/sdb
我的问题是这样的。我想创建一个进度条来显示所做的事情。
我试过。
status=progress
到 dd
命令,我可以在终端获得进度,但我不知道如何从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版本
谢谢你的帮助
你是在正确的轨道上与 status=progress
但它输出到stderr,而不是stdout。如果你做 stderr = PIPE
然后从 cloning.stderr
而不是 cloning.stdout
,它将工作。