花了一整天的时间才弄明白为什么不起作用。这是Python3.6。
目标是从命令行捕获进度,作为一个例子进行分解。碎片会逐行输出进度。
对于Python子进程,它似乎无法将任何输出保存到文件中。我做到了:
cmd_str="sudo shred -v /dev/sde"
f="/test.log"
with Popen(cmd_str, stdout=f, bufsize=1, universal_newlines=True) as p:
for line in p.stdout:
print(line, end='')
但是它生成了一个错误,说:FileNotFoundError:[Errno 2]没有这样的文件或目录:“sudo shred-v/dev/sde”:“sudo shred-v/dev/sde”,这对我来说毫无意义。
简单地说,我希望在文件中追加一行新的输出并将其关闭。这样,外部程序就可以检查日志文件,看看进展如何。
我刚刚观察到,当我使用tee查看它是否正在记录,并且它也没有记录到文件中,尽管创建了日志文件。
更新:我已经在这个网站上尝试了所有可能的解决方案,但都没有成功。我开始想,这是否与一个进度条不能被发送到stdout有关?这些都是尝试过的,但都失败了:
live output from subprocess command
Constantly print Subprocess output while process is running