当前位置: 首页 > news >正文

python程序使用nohup后台执行不能实时输出到定向文件的解决方法

问题描述:使用nohup命令后台执行python,但python中print方法打印结果不能实时输出到nohup后台定向文件,只能在程序结束时一次性输出。典型问题样例:在python中使用了os.system(command)方法,command命令打印的结果可以实时输出至定向文件,而print方法打印结果不能实时输出,问题代码样例如下:

import os
import timeprint("###################################")
print("ls start...")
print("###################################")os.system("ls -l")print("###################################")
print("ls end!")
print("###################################")

nohup后台执行命令如下:

nohup python nohup_test.py > nohup_test.out 2>&1 &

后台程序执行完成后的nohup_test.out内容如下:

如图所示,nohup_test.out中打印的结果时间顺序不对。

问题原因:python中的print方法在打印时默认是打印到缓冲区,当python程序后台执行时,print方法的打印结果默认会统一打印至缓冲区,直到python程序执行完成后再从缓冲区打印至后台重定向文件,执行python -h可以看到关闭缓冲区的相关帮助,具体如下图所示:

解决方法:常见的解决方法有以下几种:

(1)在后台执行python程序时加上-u参数,关闭打印缓冲区,具体命令如下(推荐,简单便捷,无需更改代码):

nohup python -u nohup_test.py > nohup_test.out 2>&1 &

 (2)在代码中引入sys包,在没个print函数之后均加入一行sys.stdout.flush()进行强制刷新标准输出,该方法可以实现在打印缓冲区未满的情况下输出也可以立即发送至终端(不推荐,需要添加代码)。

 (3)在使用print函数打印时将print函数的flush参数设置为True,该参数默认为False,print函数的定义如下图所示(不推荐,需要添加代码):

解决后打印结果如下:


http://www.mrgr.cn/news/25182.html

相关文章:

  • 移动订货小程序哪个好 批发订货系统源码哪个好
  • 由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(五)
  • 手把手教你安装pytorch包
  • 多线程和高并发-17题
  • 企业如何“向内求”, 挖出更多净利润?
  • 电脑文件怎么加密?文件加密方法介绍
  • LVDS眼图eys diagram测试
  • 核心系统用PG了,抠脑壳的权限,搞晕了!
  • 数据分布:散点+箱线+小提琴 三图合一
  • 公开数据库汇总及下载3-遗传变异数据库(ClinVar、dbVar、dbSNP、RefSeq)、oncoKB
  • 价值流:从理论框架到实践落地的系统化指南
  • 【Linux】Linux常见指令以及权限理解(下)
  • 路径规划 | 基于A*算法的往返式全覆盖路径规划的改进算法(Matlab)
  • 峟思-振弦式应变计在煤矿井筒中的应用
  • 《2024-2029年全球及中国交通安全移动护栏市场现状分析与发展前景预测研究报告》
  • 股指期货开户条件有什么要求和流程?
  • 【JAVA入门】Day39 - 字符集
  • 初识Linux · 进程(1)
  • 华媒舍:10种提升推特大V发文推广曝光率的方式
  • 零基础考过软考信息系统项目管理师经验分享