【发布时间】:2023-02-04 04:06:06
【问题描述】:
最小的例子:
def main():
for i in range(100):
print("One line every 2s", end = "\n")
time.sleep(2)
if __name__ == '__main__':
with open("log.out", 'w') as out, open("log.err", 'w') as err:
sys.stdout = out
sys.stderr = err
main()
我希望在每一行之后将打印语句写入标准输出文件。我尝试失败:
python -u thisfile.py
在 bashrc (zshrc)
PYTHONUNBUFFERED = 1
open("log.out", 'wb', buffering = 0)
更改主要功能不是实际情况的选择。我使用 bash 运行 python 文件并重定向错误和输出的解决方案很艰难。
我知道有很多这样的问题,但似乎没有一个对我有用。
该解决方案应该适用于 python 3.8 和更新版本。
【问题讨论】:
-
所以我想你不能使用
print(..., flush=True)? -
将
sys.stdout设置为不同的文件句柄并不意味着新文件句柄会继承原始标准输出所使用的任何缓冲。 -
什么能你改变了脚本?
-
理想情况下,我不想更改分散在某些文件中的所有打印语句,但我想这将是我最后的选择
-
理想情况下,我只想更改 if 中的代码姓名==“主要”部分