有没有一种标准的方法(没有安装第三方库)来在Python中进行跨平台文件系统模拟?如果我必须使用第三方库,哪个库是标准的?
我使用内置模块插入一些实例,因此可以全局访问它们以进行调试.该__builtins__模块的问题在于它是主脚本中的模块,并且是模块中的dict,但由于我的脚本取决于案例可以是主脚本或模块,我必须这样做:
if isinstance(__builtins__, dict):
__builtins__['g_frame'] = 'xxx'
else:
setattr(__builtins__, 'g_frame', 'xxx')
Run Code Online (Sandbox Code Playgroud)
有没有一个解决方法,比这更短?更重要的是,为什么__builtins__这样做?
这是一个看到这个的脚本.创建一个模块a.py:
#module-a
import b
print 'a-builtin:',type(__builtins__)
Run Code Online (Sandbox Code Playgroud)
创建一个模块b.py:
#module-b
print 'b-builtin:',type(__builtins__)
Run Code Online (Sandbox Code Playgroud)
现在运行python a.py:
$ python a.py
b-builtin: <type 'dict'>
a-builtin: <type 'module'>
Run Code Online (Sandbox Code Playgroud) 我想使用unittest测试一个使用上下文管理器从文件读取的方法:
with open(k_file, 'r') as content_file:
content = content_file.read()
Run Code Online (Sandbox Code Playgroud)
我不想在我的系统上创建一个文件,所以我想嘲笑它,但我现在并没有太大的成功.我发现了mock_open,但我真的不明白我应该如何使用它并在我的测试用例中将mock作为content_file提供.这里有这篇文章,但是我不明白在不修改原始代码的情况下如何在测试用例中编写这个.
有人能指出我正确的方向吗?
这是获取版本并与 open 一起使用以从文件路径位置读取文件的函数。
def get_version(self):
try:
with open("file_path") as openfile:
for line in openfile:
sline = line.split()
for row, column in enumerate(sline):
if column == "version=":
version = sline[row+1].strip('"')
return version
Run Code Online (Sandbox Code Playgroud)