#!/bin/python
import os
pipe=os.popen("ls /etc -alR| grep \"^[-l]\"|wc -l") #Expr1
a=int(pipe.read())
pipe.close()
b=sum([len(files) for root,dirs,files in os.walk("/etc")]) #Expr2
print a
print b
print "a equals to b ?", str(a==b) #False
print "Why?"
Expr1的函数和Expr2的函数有什么区别? 我认为Expr1给出了正确的答案,但不确定。在
如果使用walk,则忽略错误(请参见this),ls会为每个错误发送一条消息。这些都算作文字。在
简短回答:
ls -laR | grep "^[-l]"
统计指向目录的符号链接。 它匹配任何以l
开头并包含指向目录的符号链接的行。在相反,
[files for root, dirs, files in os.walk('/etc')]
不计算指向目录的符号链接。它忽略所有目录,只列出文件。在长回答:
以下是我如何识别差异:
line_to_filename
试图在ls -laR
的输出中查找文件名。在这定义了},基本上与您的代码相同。在
^{pr2}$expr1
和{这将从
expr1
中删除同时位于expr2
中的名称:删除
expr1
和expr2
共享的文件名之后收益率
然后我使用
find
在/etc
中找到这些文件,并试图猜测这些文件有什么不寻常之处。它们是指向目录(而不是文件)的符号链接。在在我的机器上,/etc是指向/private/etc的符号链接,因此}之间的预期等价性。在
ls /etc
只有一行输出。ls /etc/
给出ls
和{相关问题 更多 >
编程相关推荐