[英]Module reload doesn't work as expected
我在理解为什么reload()
在以下代码中无法正常工作时遇到问题:
# Create initial file content
f = open('some_file.py', 'w')
f.write('message = "First"\n')
f.close()
import some_file
print(some_file.message) # First
# Modify file content
f = open('some_file.py', 'w')
f.write('message = "Second"\n')
f.close()
import some_file
print(some_file.message) # First (it's fine)
reload(some_file)
print(some_file.message) # First (not Second, as expected)
如果我使用外部编辑器手动更改文件some_file.py
(在程序运行时),那么一切都会按预期进行。 所以我想这可能与同步有关。
环境:Linux,Python 2.7。
问题在于您的代码会立即更改文件,因此该文件显示为未经修改。 看到这个答案
我在两次文件写入之间尝试了相同的1秒钟睡眠时间来测试您的代码,但工作正常
import time
# Create initial file content
f = open('some_file.py', 'w')
f.write('message = "First"\n')
f.close()
import some_file
print(some_file.message) # First
time.sleep(1) # Wait here
# Modify file content
f = open('some_file.py', 'w')
f.write('message = "Second"\n')
f.close()
import some_file
print(some_file.message) # First
reload(some_file)
print(some_file.message) # Second, as expected
解决方法
.pyc
文件( some_file.pyc
或类似的文件)。 这将迫使python重新编译它。 只需随即更改模块并写入文件即可。 看到这个 。 就像是
some_file.message = "Second\\n" f = open('some_file.py', 'w') f.write('message = "Second"\\n') f.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.