【问题标题】:Writing output of python print() to file appears after process is killed / finished [duplicate]进程被杀死/完成后出现将python print()的输出写入文件[重复]
【发布时间】:2020-11-09 09:33:40
【问题描述】:

我的代码中有几个 print() 语句。我想在一夜之间运行代码并让它们写入文件。 我尝试将输出重定向到文件:

python mycode.py >> log.txt

当 python 进程正在运行时,我看不到任何写入文件的内容。当我终止进程并打开日志文件时,我在其中找到了输出。

当我在每个打印语句中显式指定文件句柄时,看到了类似的行为:

output_file = open('log.txt','w')
print('blablabla', file=output_file)

如何让print 立即写入文件?我错过了什么吗?

【问题讨论】:

    标签: python windows file file-io


    【解决方案1】:

    您不会立即看到您的更改,因为在某些情况下,由于缓冲,对文件所做的更改可能在您关闭文件之前不会显示。

    要保存更改而不关闭,请参考此页面Can I save a text file in python without closing it?

    【讨论】:

    • 这是否意味着我必须在每次print() 通话后拨打output_file.flush()
    • 每次打印后不需要。变化正在累积,您只需要在需要时flush即可。
    • 是的,没错,这在一定程度上解决了问题。似乎这就是所有 python 文件 API 的行为方式,对吧?每次我们刷新或关闭时,它都会写入磁盘。 os.fsync(file.fileno())呢?
    【解决方案2】:

    你能试试这个并告诉我它是否立即更新。我一直在 PyCharm 中使用这种语法。我希望它也适用于你。

    如果你想一次插入一堆数据

    with open("log.txt", 'w') as test:
        print ("hello world!", file=test)
    

    如果你想将数据插入.txt,那么做一些处理,然后再次返回以向.txt添加更多数据

    test = open("log.txt", 'w')
    print ("hello world!", file=test)
    #==== Do some processes ====
    print("This's the end of the file")
    test.close()
    

    【讨论】:

    • 这将每次打开-关闭文件
    • 这不能解决我的问题吗?
    • 这将在您完成编辑后关闭,因为在您编写的语法中,您在它的末尾没有关闭子句,因此文件预测您要写更多,直到您完成抱怨。 with open 更好,因为它也使您能够一次编写大量代码,一次执行。如果你想在做一些 xode 时初始化你的 open 函数,然后返回添加其他东西。您必须在末尾添加close()
    • 我会将我解释的内容附在我的答案中。
    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多