当前位置: 首页 > 知识库问答 >
问题:

当标准输出被重定向到文件[duplicate]时,Python脚本不写入输出

计承德
2023-03-14

我在raspberry pi上得到了一个启动时运行的python脚本(运行良好),我想将输出附加到现有的文本文件中。我在我的/etc/rc.local文件中得到了这段代码(我在cron中也尝试了同样的方法,但由于某种原因,它甚至没有启动脚本)。

python3 /home/pi/script.py >> /home/pi/log.txt 

不幸的是,无论我尝试什么,日志文件总是空的,除非我直接运行同一个命令并通过按ctrl c而不是ctrl z中止脚本。似乎脚本必须以正确的方式关闭,然后才能将任何内容写入文件,但我希望它在每次输出时逐渐保存文件

编辑:我解决了。显然,文件只有在填充了一定数量的内存或脚本完成后才会被写入是正常的(在我的情况下从来没有,因为我总是在那之前重启pi)。添加标志-u以立即写入文件。

python3 -u /home/pi/script.py >> /home/pi/log.txt 

共有1个答案

东门修能
2023-03-14

如果您使用print输出文本,其参数flush可能会帮助您:

print('Hello, World', flush=True)

否则:

import sys
sys.stdout.write('Hello, world\n')
sys.stdout.flush()

也会有同样的效果。

 类似资料:
  • 问题内容: 在bash中,调用将在stdout上显示该命令的任何输出。 调用会将该命令的任何输出重定向到指定的文件(在本例中为“输出”)。 有没有一种方法可以将输出重定向到文件 并 在stdout上显示? 问题答案: 您想要的命令名为 : 例如,如果您只关心标准输出: 如果要包括stderr,请执行以下操作: 将通道2(stderr /标准错误)重定向到通道1(stdout /标准输出),以便将两

  • 问题内容: 是否可以在Python中临时重定向stdout / stderr(即在方法期间)? 编辑: 当前解决方案的问题(我最初记得但后来忘记了)是它们没有 重定向 ;相反,它们只是完全替换了流。因此,如果某个方法由于某种原因(例如,由于将流作为参数传递给某物)而具有该变量的 本地 副本,则该方法将无效。 有什么办法吗? 问题答案: 要解决某些函数可能已将流作为局部变量缓存的问题,因此替换全局变

  • 问题内容: 我有一个要在IPython中运行的Python脚本。我想将输出重定向(写入)到文件,类似于: 当我在IPython中运行脚本时如何执行此操作,例如 有一个较旧的页面描述了可以编写的用于执行此操作的函数,但是我相信现在有一种内置的执行方法,我只是找不到。 问题答案: IPython拥有自己的上下文管理器来捕获stdout / err ,但是它不重定向到文件,而是重定向到对象: 并且此功能

  • 问题内容: 我的基本程序从脚本GUI.py导入了它的GUI界面。 在我的GUI.py中: 但是它的作用是打开两个窗口,第一个窗口 (顶层 窗口 ) 按预期工作,第二个窗口 处于空闲状态 , 这是期望的,直到我单击某个按钮 ,该 按钮 在连续按下后打印数据,并且打印的数据应出现在第二个窗口的文本小部件中, 但是 不会发生,程序也没有响应,当我关闭“顶层”窗口时,会出现错误消息 “ TclError:

  • 问题内容: 我试图这样做以确定是否将stdin重定向到文件: 但这不起作用,因为当变量$ input为“&0”时,bash会将其解释为文件名。 但是,我可以这样做: 问题在于./myScript实际上是一个长长的命令行,我不想重复,也不想为其创建函数,因为它也不那么长(不值得)。 然后我想到这样做: 但这需要再运行一个命令和一个管道(即子外壳)。 还有另一种更简单,更有效的方法吗? 问题答案: 首

  • 问题内容: 我正在从另一个python脚本(A)调用python脚本(B)。 使用subprocess.call,如何将B的标准输出重定向到指定的文件? 我正在使用python 2.6.1。 问题答案: 将文件作为参数传递给: