繁体   English   中英

为什么Python有时会忽略源文件以支持pyc文件?

[英]Why does Python ignore source files in favor of pyc files sometimes?

我有一种情况,我在磁盘上快速更改P​​ython源文件,并且对于每次更改,在子进程中使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM