将 niced 命令直接输出到文本文件
Posted
技术标签:
【中文标题】将 niced 命令直接输出到文本文件【英文标题】:Direct output of a niced command to a text file 【发布时间】:2013-11-13 13:08:44 【问题描述】:我正在尝试运行具有良好关卡集的 python 脚本。
nice -n 5 python3 blah.py
按预期运行并将文本输出发送到屏幕。但是,我想将输出通过管道传输到一个文本文件并在后台运行,这样我就可以远程检查进度。
然而,
nice -n 5 python3 blah.py > log.txt &
创建日志文件 log.txt 但不向文本文件写入任何内容,因此我不确定标准输出将发送到何处或如何将其定向到我的文本文件。
【问题讨论】:
试试说:nice -n 5 python3 blah.py >& log.txt &
无法复制。请向我们展示重现问题所需的最小blah.py
,以及运行第二个命令后jobs
的输出。
程序可能只写入STDERR
而没有写入STDOUT
。
在没有nice
的情况下重定向时,它的行为是否符合您的预期?如果不是,那只是一个缓冲问题。
【参考方案1】:
我最终使用命令解决了这个问题
nice -n 5 python3 -u blah.py >log.txt &
-u 强制标准输入、标准输出和标准错误的二进制 I/O 层无缓冲。这允许在进程运行时将 python 脚本的输出写入文本文件。
【讨论】:
【参考方案2】:我猜你正在通过ssh
运行命令,并且想在运行和检查日志之间注销。为此运行:
nohup nice -n 5 python3 blah.py > log.txt &
这将防止在注销时杀死程序。 nohup 还将stderr
重定向到stdout
,这也可能是导致log.txt
文件为空的原因。
【讨论】:
这仍然不会在进程运行时写入日志文件,因为没有 -u(请参阅下面的答案),stdin、stdout 和 stderr 的输出会被缓冲。 nohup 对于通过 ssh 连接运行它很有用。以上是关于将 niced 命令直接输出到文本文件的主要内容,如果未能解决你的问题,请参考以下文章