簡體   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