如何将标准输出重定向到 Python 中的任意文件?
当一个长时间运行的 Python 脚本(例如,Web 应用程序)从 ssh session 中启动并返回,并且 ssh session 关闭时,应用程序将引发 IOError 并在尝试写入标准输出时失败。我需要找到一种方法使应用程序和模块输出到文件而不是标准输出,以防止由于 IOError 而导致失败。目前,我使用 nohup 将输出重定向到文件,这样就完成了工作,但出于好奇,我想知道是否有一种方法可以不使用 nohup。
我已经尝试过 sys.stdout = open('somefile', 'w')
,但这似乎并不能阻止某些外部模块仍然输出到终端(或者可能是 sys.stdout = ...
行根本没有触发)。我知道它应该可以通过我测试过的更简单的脚本来工作,但我还没有时间在 Web 应用程序上进行测试。
最佳答案
如果您想在 Python 脚本中进行重定向,将 sys.stdout
设置为文件对象即可:
# for python3
import sys
with open('file', 'w') as sys.stdout:
print('test')
一种更常见的方法是在执行时使用 shell 重定向(在 Windows 和 Linux 上相同):
$ python3 foo.py > file
https://stackoverflow.com/questions/4675728/