Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Python有时会忽略源文件而支持pyc文件?_Python_Subprocess_Filesystems - Fatal编程技术网

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

为什么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

我曾经遇到过这样一种情况:我在磁盘上快速更改Python源文件,并且对于每次更改,都在子流程中使用Python运行它们(这是用于突变测试工具的)。我发现,在某些情况下,Python子进程要么看不到更改,要么忽略它,以支持
\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