6.7.4 查找文件
which()函数会扫描一个路径以查找一个命名文件。典型的用法是在环境变量PATH定义的shell搜索路径中查找一个可执行程序。
import shutil
print(shutil.which('virtualenv'))
print(shutil.which('tox'))
print(shutil.which('no-such-program'))
如果无法找到与搜索参数匹配的文件,则which()会返回None。
运行结果:
None
None
None
which()接收参数,可以根据文件的权限和要检查的搜索路径来完成过滤。path参数默认为os.environ(‘PATH’),不过也可以是包含目录名并用os.pathsep分隔的任意字符串。mode参数应当是与文件权限对应的一个位掩码。默认地,这个掩码会查找可执行文件,不过下面的例子使用了可读位掩码和另外一个搜索路径来检查找一个配置文件。
import os
import shutil
path = os.pathsep.join(['.',os.path.expanduser('~/pymotw')])
mode = os.F_OK | os.R_OK
filename = shutil.which(
'config.ini',
mode=mode,
path=path,
)
print(filename)
以这种方式搜索可读文件时,可能还会出现竞态条件,因为在找到文件和真正使用这个文件的间隙,这个文件可能被删除或者它的权限可能改变。
运行结果:
None