我对 python 和 subprocess 模块比较陌生。
我正在尝试使用 mac osx 上的子进程使用 python 获取目录大小。os.walk 需要很长时间来处理大型目录。我希望让子进程使用 shell 命令执行此操作并加快结果。这个shell命令对我有用,但我不能让它从子进程中工作?
( cd /test_folder_path && ls -nR | grep -v '^d' | awk '{total += $5} END {print total}' )
这就是我试图在 python 中创建子进程的方式。
import shlex
import subprocess
target_folder = "/test_folder_path"
command_line = "( cd " + target_folder + " && ls -nR | grep -v '^d' | awk '{total += $5} END {print total}' )"
args = shlex.split(command_line)
print args
folder_size = subprocess.check_output(args)
print str(folder_size)
在 python 中,调用 subprocess.check_ouput 时出现以下错误
folder_size = subprocess.check_output(args) 文件“/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第 568 行,在 check_output 过程中= Popen(stdout=PIPE,*popenargs,**kwargs)文件“/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第 711 行,在init errread,errwrite)文件“/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第 1308 行,在 _execute_child raise child_exception OSError: [Errno 2] No such file or directory
当我在 shell 命令中使用相同的目录时,它可以工作并为我提供正确的目录大小。
任何帮助使这种方法起作用或向我指出更好的方法将不胜感激。