Bash 不会将输出重定向到文件,运行 在后台

Bash won't redirect output to a file and run in the background

我见过很多与此类似的问题,但问题是 none 的其他解决方案已经解决了我的问题。我想要 运行 2 python 脚本并使用 nohup.

将它们的输出重定向到单独的日志文件

此代码位于名为 startmain 的 bash 脚本中:

nohup python3 GUI.py > GUI.log 2>&1 &
nohup python3 main.py > main.log 2>&1 &

当我 运行 sh startmain 时, 脚本都执行,但没有任何内容写入任一日志文件。

现在假设我通过删除行尾的 & 字符来更改 startmain 代码:

nohup python3 GUI.py > GUI.log 2>&1
nohup python3 main.py > main.log 2>&1

这段代码说我不想在后台运行脚本 运行ning,所以只有 GUI.py 运行s; 然而,这里它实际上将所有输出从GUI.py定向到GUI.log。我知道为什么 main.py 在这里不 运行,但我不知道为什么在这种情况下输出被写入 GUI.log 而不是当我尝试 运行后台脚本。

知道我的问题是什么吗?我的问题与类似问题的不同之处在于我正在执行 2 个脚本,这可能是它不起作用的原因。

感谢@KamilCuk 的帮助!

添加 -u 选项解决了问题:

nohup python3 -u GUI.py > GUI.log 2>&1
nohup python3 -u main.py > main.log 2>&1

但为什么这样做有效?

因为默认情况下,stdout/stderr 输出是缓冲的,并且只在特定的时间间隔刷新(例如每 1kB)。 “-u”选项用 python 消除缓冲区,并将输出立即写入目标。

注意:这个问题实际上是 nohup-is-not-writing-log-to-output-file

的重复