【发布时间】:2014-04-05 12:50:05
【问题描述】:
大家好,我正在尝试获取包含 python 中特定文件的子目录列表??
我使用了 subprocess.call() 并通过 find 命令,
subprocess.call(['find','.','-name','__main__.py'])
但它会在终端打印路径(“./directory/file”)...
【问题讨论】:
标签: python linux command subprocess
大家好,我正在尝试获取包含 python 中特定文件的子目录列表??
我使用了 subprocess.call() 并通过 find 命令,
subprocess.call(['find','.','-name','__main__.py'])
但它会在终端打印路径(“./directory/file”)...
【问题讨论】:
标签: python linux command subprocess
您不需要外部子进程,您可以使用纯 Python 找到目录:
import os
dirs = [root for root, _, filenames in os.walk('.')
for filename in filenames if filename == '__main__.py']
如果您想懒惰地获取目录名称,请将[] 替换为()。
subprocess 还允许即时获取名称:
import os
from subprocess import Popen, PIPE
p = Popen(['find', '.', '-name', '__main__.py'], stdout=PIPE, bufsize=-1)
for path in p.stdout:
print(os.path.dirname(path)) # do something with the dirpath
p.stdout.close()
rc = p.wait()
注意:与纯 Python 版本不同,如果有一个到 __main__.py 的路径,其中包含换行符,它会中断。
【讨论】:
使用subprocess.check_output代替subprocess.call,可以得到命令的输出:
try:
output = subprocess.check_output(['find','.','-name','__main__.py'])
except subprocess.CalledProcessError:
output = '' # fallback output
output 是一个字符串。您可能需要拆分行来处理每个文件。
filelist = output.splitlines()
要仅获取包含文件的目录的名称,请使用os.path.dirname:
import os
for filepath in filelist:
dirpath = os.path.dirname(filepath)
# Do something with `dirpath`
【讨论】: