【问题标题】:Problems with nohup of a python code which calls another nohup?调用另一个 nohup 的 python 代码的 nohup 问题?
【发布时间】:2020-01-15 09:44:27
【问题描述】:

问题是这样的。

我有一个python代码“test.py”,它调用了一个命令行:

os.system('nohup some_command > b.txt &')
print(some_results)

而且效果很好,它将“some_command”的输出信息重定向到“b.txt”,并且只将“some_results”打印到终端。

我想在后台运行代码(退出终端时让它继续运行),所以我使用这个命令:

nohup python test.py > a.txt &

现在所有内容,包括“some_results”和“some_command”的输出,都被重定向到“a.txt”,导致程序无法正常运行。

有没有办法只将“some_results”而不是所有内容重定向到“a.txt”?我该怎么办?

PS:我不知道我应该搜索什么关键字,通过搜索“nohup in nohup”我没有找到相关的解决方案。

============================== 一些不成功的尝试=============== ==========

看完一个推荐问题:Redirect stdout to a file in Python?

我有个主意:

import sys
sys.stdout=open('c.txt','w')
os.system('nohup some_command > b.txt &')
print(some_results)

但是问题还是没有解决。

nohup python test.py > a.txt & 将 python 输出重定向到“c.txt”(如预期的那样),但其他所有内容都重定向到“a.txt”而不是“b.txt”,并导致失败。

python test.py > a.txt & 临时工作:它将 python 输出重定向到“c.txt”,命令输出到“b.txt”,并将“a.txt”留空,正如预期的那样(有点)。

但是,每次调用“os.system”命令时,终端都会弹出“nohup: redirecting stderr to stdout”消息。重启终端后,不再弹出消息,程序仍在运行,但重定向变为nohup python test.py > a.txt &

============== 一些附加信息 =====================

os.system(blabla) 被多次执行。

“some_command”其实是“pocketsphinx”,输出了很多日志,包括音素的时间对齐,最后是一行描述没有时间对齐的音素序列。我需要的是“时间对齐”部分。

在正常情况下,最后一行总是跟在信息部分之后,无论它们在哪里打印。

在我的问题中,最后一行始终正确地位于“b.txt”中。信息(包括我希望它们在“b.txt”中的时间对齐)被重定向到其他地方。

【问题讨论】:

标签: python linux


【解决方案1】:

在您的脚本中,只需将 stdout 和 stderr 都重定向到一个文件,没有 nohup,没有背景:

os.system('some_command > b.txt 2>&1')
print(some_results)

在终端中:

nohup python my_script.py > a.txt &

【讨论】:

  • 对不起,结果还是和 nohup 和背景一样。还是谢谢
  • 似乎消息是由some_command 发送到stderr 的。我已经编辑了答案并将 stdout 和 stderr 都重定向到 b.txt
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多