Python在程序退出时修改关闭的文件

Python在程序退出时修改关闭的文件,python,Python,我试图修改python中使用的文件的时间戳 在运行脚本之前,我有以下几点: jlinkels@donald-pc:/tmp$ echo "Hello World" /tmp/filter_cc.log jlinkels@donald-pc:/tmp$ stat filter_cc.log Access: 2018-08-24 00:56:05.942539951 +0000 Modify: 2018-08-24 00:56:05.942539951 +0000 Change: 2018-08-2

我试图修改python中使用的文件的时间戳

在运行脚本之前,我有以下几点:

jlinkels@donald-pc:/tmp$ echo "Hello World" /tmp/filter_cc.log
jlinkels@donald-pc:/tmp$ stat filter_cc.log
Access: 2018-08-24 00:56:05.942539951 +0000
Modify: 2018-08-24 00:56:05.942539951 +0000
Change: 2018-08-24 00:56:05.942539951 +0000
那很好。然后我运行这个Python脚本:

#! /usr/bin/python
import os, sys
os.utime ("/tmp/filter_cc.log", (1394628000.0,1394628000.0))
sys.exit()
退出脚本后,我再次运行stat:

jlinkels@donald-pc:/tmp$ stat filter_cc.log
Access: 2018-08-24 00:58:10.441487778 +0000
Modify: 2014-03-12 12:40:00.000000000 +0000
Change: 2018-08-24 00:58:09.941491078 +0000
没关系。os.utime语句中的时间戳是2014年的日期

现在的问题是:当我在Python脚本中访问该文件时,它在os.utime语句之后被修改。大概在出口处。在运行脚本之前,我删除了上一个文件。 这就是剧本:

#! /usr/bin/python
import os, sys
logfile = open ('/tmp/filter_cc.log', 'w')
logfile.write ("Hello world\n")
logfile.close 
os.utime ("/tmp/filter_cc.log", (1394628000.0,1394628000.0))
sys.exit()
因此,我预计os.utime调用会将文件时间设置为2014年。就像第一个剧本一样。然而,情况就是这样:

jlinkels@donald-pc:/tmp$ stat filter_cc.log
Access: 2018-08-24 01:03:36.042778408 +0000
Modify: 2018-08-24 01:03:35.542783334 +0000
Change: 2018-08-24 01:03:35.542783334 +0000
这绝对不好。最后一条语句是脚本是os.utime。但Python似乎再次在操作系统级别修改了关闭的文件

我应该如何关闭该文件,以便os.utime可以在同一脚本中修改文件时间


运行Debian Jessie和Python 2.7.9时,这里的问题是您忘记关闭文件

logfile.close 
要关闭该文件,您需要执行以下操作

logfile.close()
即使第一个代码片段不是您想要的,它也不会产生错误,因为它仍然是有效的语法。函数就像任何变量一样。换句话说,函数是第一类对象。这里有一个有趣的讨论:


因此,在代码中的任何地方,如果您添加了一个要调用的函数的名称,而不添加括号,python解释器就会认为您希望创建一个表达式并继续执行,而不会产生错误。

您说得太对了。显然,Python接受了这一点,但没有生成错误。为什么它是一个有效的声明,即使它没有达到预期的效果?(至少不是我干的?)。如果你把这个作为答案贴出来,我可以投你一票。我会加上解释。我只是Python的初学者。虽然我在许多语言中有40年的编程经验,但这是我第一次遇到省略括号不会产生错误的情况。我明白你说的,只是我从来没有意识到这是可能的。很高兴能帮上忙。是的,如果你来自像Java这样的语言,这真的会绊倒你