Python子流程更改了不应该触及的文件的时间戳

时间:2017-06-17 07:25:33

标签: linux python-2.7 subprocess spyder netcdf

场合

我在Linux OS(Ubuntu 14.04 LTS)中使用IDE Spyder 2.2.5中的Python。

我正在使用实用程序ncdump(从二进制数nc转换为源cdl格式)和ncgen(反之亦然)编辑和创建netcdf文件。

命令ncgen file.cdl仅检查源代码的语法。如果要创建全新的二进制文件,则必须启动ncgen -b file.cdl。 (来源man ncgen。)

证据

来自Linux终端 - 如果我从命令行运行ncgen file.cdl,现有file.nc的时间戳不会改变(如{{1}所示}})。 这是正常的,因为cdl源上的语法控件不会创建任何新的二进制文件。

来自Python IDE - 如果我使用模块子流程(ls -lht file.nc)从Python脚本提供相同的指令

import subprocess as sp

然后将file.nc的时间戳更新为运行它的时间。 使用方法sp.check_call(["ncgen", "file.cdl"]) # ncgen file.cdl sp.check_call(["ls", "-lth", "file.nc"]) # ls -lth file.nc ncgen调用sp.check_call()并不重要。 此外,Linux终端也显示了这个新的时间戳,因此更改不是Python控制台的虚构。

Python脚本确实创建了一个新的sp.call()。 但是,子进程调用会更改原则上不会触及的另一个文件file.cdl的时间戳。

有趣的是,与此netcdf作业无关的其他文件位于同一目录中。 这些没有触及。 因此,模块子进程和命令file.nc的组合可能是这种情况的一个因素。

问题

我希望运行ncgen不会触及ncgen file.cdl的时间戳,因为它在Linux终端上运行时会发生。

在Python环境中处理时间戳令人困惑。我不知道我输出的netcdf文件有多大,并且相应地采取行动。

  • 是否期望这种行为(XFAIL情况)?我怎么能控制它呢?
  • 这可能是出乎意料地发生的原因(失败情况)?

0 个答案:

没有答案