Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python模块中打开文件,并在脚本结束时将其关闭_Python_File - Fatal编程技术网

在Python模块中打开文件,并在脚本结束时将其关闭

在Python模块中打开文件,并在脚本结束时将其关闭,python,file,Python,File,我有一个Python模块,在它包含的一些方法中执行一些日志记录: 模块.py LOG_FILE = "/var/log/module.log" def log(message): with os.fdopen(os.open(LOG_FILE, os.O_RDWR | os.O_CREAT, 0664), "a+") as f: f.write("[%s] %s\n" % (time.strftime("%c"), message)) def do_something

我有一个Python模块,在它包含的一些方法中执行一些日志记录:

模块.py

LOG_FILE = "/var/log/module.log"

def log(message):
    with os.fdopen(os.open(LOG_FILE, os.O_RDWR | os.O_CREAT, 0664), "a+") as f:
        f.write("[%s] %s\n" % (time.strftime("%c"), message))

def do_something():
    log("Doing something")
    # ...
在这个实现中,每次调用
log
方法时都会打开和关闭日志文件

我正在考虑对其进行重构,以便在加载模块时打开一次文件,但我不确定如何确保在导入模块的脚本结束时关闭该文件。有没有干净的方法可以做到这一点


编辑:我不是在遇到异常时要求关闭文件,而是在导入我的模块的脚本退出时要求关闭文件。

Python通常非常擅长在自身之后进行清理。如果您必须在脚本结束时执行某些操作,则需要查看-但即使如此,它也不能提供任何保证

您还可以考虑日志记录到<代码> STDUD> 或<代码> STDRR ,这取决于用途,避免将文件一起放在一起:

import sys

def log(message):
    sys.stderr.write("[%s] %s\n" % (time.strftime("%c"), message))

Python通常非常擅长清理自身。如果您必须在脚本结束时执行某些操作,则需要查看-但即使如此,它也不能提供任何保证

您还可以考虑日志记录到<代码> STDUD> 或<代码> STDRR ,这取决于用途,避免将文件一起放在一起:

import sys

def log(message):
    sys.stderr.write("[%s] %s\n" % (time.strftime("%c"), message))

Python通常非常擅长清理自身。如果您必须在脚本结束时执行某些操作,则需要查看-但即使如此,它也不能提供任何保证

您还可以考虑日志记录到<代码> STDUD> 或<代码> STDRR ,这取决于用途,避免将文件一起放在一起:

import sys

def log(message):
    sys.stderr.write("[%s] %s\n" % (time.strftime("%c"), message))

Python通常非常擅长清理自身。如果您必须在脚本结束时执行某些操作,则需要查看-但即使如此,它也不能提供任何保证

您还可以考虑日志记录到<代码> STDUD> 或<代码> STDRR ,这取决于用途,避免将文件一起放在一起:

import sys

def log(message):
    sys.stderr.write("[%s] %s\n" % (time.strftime("%c"), message))

当导入模块的脚本退出时,Python将自动为您关闭打开的文件


但实际上,只需使用Python即可。

当导入模块的脚本退出时,Python将自动为您关闭打开的文件


但实际上,只需使用Python即可。

当导入模块的脚本退出时,Python将自动为您关闭打开的文件


但实际上,只需使用Python即可。

当导入模块的脚本退出时,Python将自动为您关闭打开的文件


但实际上,只需使用Python。

操作系统会处理打开的文件描述符,然后进程就会死亡。如果未刷新应用程序内的文件缓冲区,可能会导致数据丢失。您可以在每次写入后在
log()
函数中添加
f.flush()
(注意:它不能保证数据以物理方式写入磁盘,因此在电源故障时数据仍可能丢失,请参阅)

在垃圾收集过程中,Python还可以在退出时关闭(并刷新)文件。但你不应该依赖它

atexit
仅在正常退出期间(以及在某些信号下退出)有效。如果脚本被突然终止,那就没用了


如图所示,使用调用
.flush()
日志记录
模块,并可能为您注册
atexit
处理程序。

操作系统处理打开的文件描述符,然后进程死亡。如果未刷新应用程序内的文件缓冲区,可能会导致数据丢失。您可以在每次写入后在
log()
函数中添加
f.flush()
(注意:它不能保证数据以物理方式写入磁盘,因此在电源故障时数据仍可能丢失,请参阅)

在垃圾收集过程中,Python还可以在退出时关闭(并刷新)文件。但你不应该依赖它

atexit
仅在正常退出期间(以及在某些信号下退出)有效。如果脚本被突然终止,那就没用了


如图所示,使用调用
.flush()
日志记录
模块,并可能为您注册
atexit
处理程序。

操作系统处理打开的文件描述符,然后进程死亡。如果未刷新应用程序内的文件缓冲区,可能会导致数据丢失。您可以在每次写入后在
log()
函数中添加
f.flush()
(注意:它不能保证数据以物理方式写入磁盘,因此在电源故障时数据仍可能丢失,请参阅)

在垃圾收集过程中,Python还可以在退出时关闭(并刷新)文件。但你不应该依赖它

atexit
仅在正常退出期间(以及在某些信号下退出)有效。如果脚本被突然终止,那就没用了


如图所示,使用调用
.flush()
日志记录
模块,并可能为您注册
atexit
处理程序。

操作系统处理打开的文件描述符,然后进程死亡。如果未刷新应用程序内的文件缓冲区,可能会导致数据丢失。您可以在每次写入后在
log()
函数中添加
f.flush()
(注意:它不能保证数据以物理方式写入磁盘,因此在电源故障时数据仍可能丢失,请参阅)

在垃圾收集过程中,Python还可以在退出时关闭(并刷新)文件。但你不应该依赖它

atexit
仅在正常退出期间(以及在某些信号下退出)有效。如果脚本被突然终止,那就没用了


同样,使用调用
.flush()
日志记录
模块,并可能为您注册
atexit
处理程序。

您的可能副本没有保证。但是,如果您正在寻找一种“尽力而为”的行为,请检查
atexit
为什么不使用
ApacheHTTP服务器
mod\uWSGi
logger
,并让他们知道