为什么Python有时会忽略源文件而支持pyc文件?
我曾经遇到过这样一种情况:我在磁盘上快速更改Python源文件,并且对于每次更改,都在子流程中使用Python运行它们(这是用于突变测试工具的)。我发现,在某些情况下,Python子进程要么看不到更改,要么忽略它,以支持为什么Python有时会忽略源文件而支持pyc文件?,python,subprocess,filesystems,Python,Subprocess,Filesystems,我曾经遇到过这样一种情况:我在磁盘上快速更改Python源文件,并且对于每次更改,都在子流程中使用Python运行它们(这是用于突变测试工具的)。我发现,在某些情况下,Python子进程要么看不到更改,要么忽略它,以支持\uuuuupycache\uuuuu的内容。下面是一个例子: 从pathlib导入路径 导入子流程 工作空间=路径(“工作空间”) workspace.mkdir(exist\u ok=True) 对于范围(3)中的i: 将open(workspace/'code.py',mo
\uuuuupycache\uuuuu
的内容。下面是一个例子:
从pathlib导入路径
导入子流程
工作空间=路径(“工作空间”)
workspace.mkdir(exist\u ok=True)
对于范围(3)中的i:
将open(workspace/'code.py',mode='wt')作为f:
f、 写(f“print({i})”)
proc=子流程.run(
'python-m code'.split(),
stdout=子流程.PIPE,
cwd='workspace')
打印(i,过程标准解码('utf-8').strip())
我希望这本书能出版:
0 0
1 1
2 2
但一般来说,它会打印如下内容:
0 0
1 0
2 0
或
也就是说,在某个时刻,Python子进程看不到我正在写入磁盘的更改
我尝试过各种尝试,用文件句柄上的os.fsync
,flush()
等刷新对磁盘的更改。唯一有区别的似乎是在关闭文件句柄之后放置大量的time.sleep()
我可以通过设置pythondotwritebytecode
告诉Python不要使用pycs,但此时我想知道发生了什么
那么,这只是刷新到磁盘的一些失败,对吗?或者我正在与Python的一个bug/功能作斗争吗?不需要特殊的刷新,但是除了禁用或删除
.pyc
,睡眠是唯一的答案:如果编写.pyc
之间的时间足够短,那么.py
看起来不会比.py
老。“足够小”取决于文件系统和操作系统,但很容易需要一整秒钟。好的,这很有意义。我想我现在就禁用pycs。
0 0
1 1
2 1