首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将实时输出保存到python中的文件

将实时输出保存到python中的文件
EN

Stack Overflow用户
提问于 2018-09-27 05:54:42
回答 1查看 226关注 0票数 1

这需要花费一整天的时间来试图找出为什么它不工作。这是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的进度条有关?这些都是尝试过的,但仍然不起作用:

live output from subprocess command

Constantly print Subprocess output while process is running

EN

回答 1

Stack Overflow用户

发布于 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='')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52526524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档