我的测试依赖于在文件系统中用os.walk
找到它们。我怀疑测试失败是因为区域设置,因为ls
显示不同的顺序
下面是Gentoo上的ls
,测试通过:
$ ls test_root/
blogit.db f.md post10.md post12.md post14.md post16.md post18.md post1.md post2.md post4.md post6.md post8.md
e.md page.md post11.md post13.md post15.md post17.md post19.md post20.md post3.md post5.md post7.md post9.md
区域设置为LANG=en_US.utf8
以下是Ubuntu上的ls
:
$ ls test_root/
blogit.db f.md post1.md post11.md post13.md post15.md post17.md post19.md post20.md post4.md post6.md post8.md
e.md page.md post10.md post12.md post14.md post16.md post18.md post2.md post3.md post5.md post7.md post9.md
如果我发布LANG=C ls
,我会在Ubuntu上得到相同的排序。现在我可以去修复我的测试,或者修复我的区域设置。我认为在Ubuntu上运行测试的一个快速解决方案是:
$ LANG=en_US.utf8 py.test tests
但这没有效果。而且LANG=en_US.utf8 ls
不会改变顺序
那么我如何影响Ubuntu中的ls
或os.walk
排序呢
以下是os.walk
如何列出Gentoo中的文件:
In [3]: for r, d , f in os.walk('test_root'):
for n in f:
print n
...:
blogit.db
page.md
post1.md
post2.md
post3.md
... snipped ...
post17.md
post18.md
post19.md
post20.md
以下是Ubuntu中的相同代码:
In [6]: for r, d , f in os.walk('test_root'):
for n in f:
print(n)
...:
blogit.db
post11.md
page.md
post9.md
post7.md
post3.md
post6.md
post17.md
post20.md
post5.md
post1.md
post2.md
post16.md
post8.md
post12.md
post18.md
post19.md
post10.md
post15.md
post13.md
post4.md
post14.md
好的,多亏了这里的提示,我决定不再仅仅依赖
os.walk
,而是将代码从:收件人:
现在所有的测试都通过了,不管是操作系统
相关问题 更多 >
编程相关推荐