如何强制python在退出程序前写一个文件?

bvjxkvbb  于 2023-03-20  发布在  Python
关注(0)|答案(3)|浏览(176)

我已经检查了this answer,但是它不起作用。我正在寻找一种方法来强制python写文件(我们称之为file_A.py),然后退出程序。我尝试了上面答案中建议的方法,但它只在目标文件存在并且我们添加更多内容时有效。在我的情况下,文件不存在,应该在程序正常退出前生成,原因是生成的文件要在程序的后续步骤中使用。
我编写的代码如下:

with open('file_A.py', 'w') as f:
    f.write(content)
    f.flush()
    os.fsync(f.fileno())

但是file_A.py没有在程序正常执行完之前生成,怎么解决?

lyr7nygr

lyr7nygr1#

如果你想确保在Python解释器退出时会发生一些事情(不管是什么事情),你可以使用 atexit 模块。
下面是一个例子:

import atexit
import sys

some_data = 'Hello world!\n'

def cleanup():
    try:
        with open('/Volumes/G-Drive/atexit.txt', 'w') as f:
            f.write(some_data)
    except Exception as e:
        print(e, file=sys.stderr)
    
atexit.register(cleanup)

# Python interpreter terminates here and the previously registered function will be called

请注意,cleanup() 在主程序中没有显式调用-它只是注册

vohkndzv

vohkndzv2#

fsync只适用于已经写入磁盘的数据。Python输出是缓冲的,所以当write完成时,数据不一定要写入磁盘。将f.flush()放在写入之后。

kfgdxczn

kfgdxczn3#

如果你想在代码还在运行的时候创建并写入一个文件,我建议使用一个外部函数来解决这个问题。
“外部函数”是写在另一个文件中的函数。
我是这样解决的:

外部函数.py

import sys
def create_file(file_name, ending, text):
    try:
        with open('{}.{}'.format(file_name, ending), 'w') as f:
            f.write("{}".format(text))
            f.flush()
    except Exception as e:
        print(e, file=sys.stderr)
    else:
        print('code is written')

主文件.py

from datetime import datetime
import outsidefunctions as of # assuming the main and the 'outsidefunctions ' are in the same directory. 
import time

logger = str(datetime.now())[:10]

# an example of how to use it.
for i in range(1000):
    print(i) 
    time.sleep(0.1)

    if i == 10:
        of.create_file(logger, 'txt', '{} was done ...'.format(logger))
        continue

正如你所说,它只会在代码结束时才被写入,所以你可以创建另一个运行时间很短的文件,只是为了写入一个文件,你的代码会被中断一小段时间(无论如何都会发生),但它会在代码还在运行的时候把它写入一个文件。

相关问题