【问题标题】:Nohup doesn't print to stdout until termination [duplicate]Nohup 在终止之前不会打印到标准输出 [重复]
【发布时间】:2020-07-08 22:19:00
【问题描述】:

我有一个类似如下的 Python 脚本:

#!/usr/bin/env python

print("Start")
sql = get_sql_from_file(...)
# The following function takes a long time to run
execute_oracle_driver(sql)
print("Finished")

我执行它:

(my-env) $ time nohup python script.py &

然后我检查是否有任何初始输出,但什么也没有:

(my-env) $ cat nohup.out
(my-env) $ 

我至少希望在不超过几秒钟后看到“开始”。即使等了几分钟,然后杀死它,我也没有输出。如果可能,我该如何解决这个问题?

【问题讨论】:

  • 不是完全特定于nohup。默认情况下,每当标准输出以任何方式重定向到文件时都会发生这种情况。
  • ...它甚至不是特定于 Python 的。 stackoverflow.com/questions/21389796/… 有这个问题的 C++ 版本,BashFAQ #9 有一篇关于它的优秀 BashFAQ 条目。
  • 顺便说一句,如何在几分钟后杀死你的程序?如果您使用 TERM 而不是 KILL,那么它应该刷新其输出。 (这就是为什么系统管理员一直告诉人们不要使用kill -9,除非作为最后的手段;程序不能刷新他们的缓冲区,清理他们的 SHM 段和临时文件,或者以其他方式做任何以这种方式终止时需要正常退出的工作)。
  • 我使用的是kill -9。看起来 kill -s TERM <pid>better approach
  • 或者只是kill <pid>,默认为TERM。

标签: python python-3.x cx-oracle nohup


【解决方案1】:

默认情况下输出是缓冲的,因此您需要确保输出已刷新;否则,在程序结束之前,nohup.out 中将看不到任何输出。一种方法如下:

print("Start", flush=True)

【讨论】:

  • How to Answer 中,请注意回答正确提出的问题 部分,以及其中有关“之前已被多次询问和回答”的问题的要点。跨度>
猜你喜欢
  • 2018-08-10
  • 1970-01-01
  • 2013-05-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多