这需要花费一整天的时间来试图找出为什么它不工作。这是Python 3.6的版本。
目标是从命令行捕获进度,以shred为例。Shred将逐行输出进度。
使用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的进度条有关?这些都是尝试过的,但仍然不起作用:
发布于 2018-09-27 06:30:08
绝对推荐拆分令牌,并且您可能需要使用shell=True
来获取sudo
:
cmd_str="sudo shred -v /dev/sde"
f="/test.log"
with Popen(cmd_str.split(), shell=True, stdout=open(f, 'w'), bufsize=1, universal_newlines=True) as p:
for line in p.stdout:
print(line, end='')
https://stackoverflow.com/questions/52526524
复制相似问题