gpt4 book ai didi

python - 为什么 Python 有时会忽略源文件而选择 pyc 文件?

转载 作者:行者123 更新时间:2023-11-28 18:00:23 26 4
gpt4 key购买 nike

我有这样一种情况,我快速更改磁盘上的 Python 源文件,并且对于每次更改,都在子进程中使用 Python 运行它们(它用于突变测试工具)。我发现在某些情况下,Python 子进程要么看不到更改,要么忽略它以支持 __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.fsyncflush() 等将更改刷新到磁盘。唯一似乎有所不同的是在文件句柄关闭后放置大量的 time.sleep()

可以通过设置 PYTHONDONTWRITEBYTECODE 告诉 Python 不使用 pycs,但此时我想知道发生了什么。

那么,我认为这只是刷新到磁盘的一些失败,对吗?或者可能有我正在解决的 Python 错误/功能?

最佳答案

不需要特殊的刷新,但除了禁用或删除 .pyc 之外, sleep 是唯一的答案:.pyc 不会显得.py 如果写入它们之间的时间足够短。 “足够小”取决于文件系统和操作系统,但很可能是一整秒。

关于python - 为什么 Python 有时会忽略源文件而选择 pyc 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56073827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com