[英]Why does Python ignore source files in favor of pyc files sometimes?
我有一种情况,我在磁盘上快速更改Python源文件,并且对于每次更改,在子进程中使用Python运行它们(它用于变异测试工具)。 我发现在某些情况下,Python子__pycache__
要么没有看到更改,要么忽略它以支持__pycache__
的内容。 这是一个例子:
from pathlib import Path
import subprocess
workspace = Path('workspace')
workspace.mkdir(exist_ok=True)
for i in range(3):
with open(workspace / 'code.py', mode='wt') as f:
f.write(f"print({i})")
proc = subprocess.run(
'python -m code'.split(),
stdout=subprocess.PIPE,
cwd='workspace')
print(i, proc.stdout.decode('utf-8').strip())
我希望这打印:
0 0
1 1
2 2
但通常它打印的东西如下:
0 0
1 0
2 0
要么
0 0
1 1
2 1
也就是说,在某些时候,我写入磁盘的更改不会被Python子进程看到。
我已尝试过各种尝试使用os.fsync
,文件句柄上的flush()
等来刷新磁盘更改。 唯一似乎有所作为的是在文件句柄关闭后放置一个很大的time.sleep()
。
我可以通过设置PYTHONDONTWRITEBYTECODE
告诉Python不使用pycs,但此时我想知道发生了什么。
所以,我是对的,这只是一些无法刷新到磁盘? 或者是否有我正在战斗的Python的错误/功能?
不需要特殊的刷新,但除了禁用或删除.pyc
,睡眠是唯一的答案:如果写入它们之间的时间足够小, .pyc
看起来不会比.py
看起来早 。 “足够小”取决于文件系统和操作系统,但它可能很容易就是一秒钟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.