当前位置: 首页 > 知识库问答 >
问题:

在mac上使用python子进程获取目录大小而不是OS.Walk

孙绍辉
2023-03-14

我对python和子流程模块比较陌生。

我正在尝试使用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/framework/python.framework/vershtml" target="_blank">ions/2.7/lib/python2.7/subprocess.py”,第568行,在check_output process=Popen(stdout=pipe,*popenargs,**kwargs)文件中“

当我在shell命令中使用相同的目录时,它会起作用,并为我提供正确的目录大小。

任何帮助使这种方法工作或指出一个更好的方法将非常感谢。

共有1个答案

宁侯林
2023-03-14

Python的子进程默认使用shell=false。为了使用管道运行子命令,您需要shell来防止python将管道(和&)解释为cd的参数。

target_folder = "/test_folder_path"
command_line = "cd " + target_folder + " && ls -nR | grep -v '^d' | awk '{total += $5} END {print total}'"
folder_size = subprocess.check_output(command_line, shell=True)

我已经尝试了上面的方法,只是使用了Drewk建议的命令:

>>> import subprocess
>>> folder_size = subprocess.check_output('cd ~/mydir && du -c | tail -n 1', shell=True)
>>> folder_size
b'113576\ttotal\n'

看起来一切都很好。

>>> import subprocess
>>> result = subprocess.check_output('du -c | tail -n 1', cwd='/path/to/home/mydir', shell=True)
>>> result
'113576\ttotal\n'
 类似资料:
  • 问题内容: 我正在尝试获取目录的大小以及使用Swift在OS X上的内容。到目前为止,我只能获得目录本身的大小,而没有内容。对于我的大多数目录,它通常显示6148个字节的值,但它的确有所不同。 我已经尝试了下面文件中的directorySize()函数,但它也返回了6,148个字节。 https://github.com/amosavian/ExtDownloader/blob/2f7dba2ec

  • 问题内容: 我查看了请求文档,但似乎什么也找不到。如何仅请求标题,以便评估文件大小? 问题答案: 发送HEAD请求: HEAD请求就像GET请求一样,仅下载标头。请注意,由服务器来实际满足您的HEAD请求。某些服务器只会响应GET请求,因此您必须发送GET请求并仅关闭连接,而不下载主体。其他时候,服务器永远不会指定文件的总大小。

  • 问题内容: function foldersize($path) { $total_size = 0; $files = scandir($path); 在脚本执行完成之前,为什么处理器使用率会过高或100%升高?可以做些什么来优化它吗?还是有其他方法可以检查文件夹和其中的文件夹大小? 问题答案: 以下是其他地方提供的其他解决方案: 如果在Windows主机上: 否则,如果在Linux主机上:

  • 问题内容: 在我重新发明这个特殊的轮子之前,是否有人有一个很好的例程来使用Python计算目录的大小?如果例程以Mb / Gb等格式很好地格式化大小,那将是非常好的。 问题答案: 这遍历所有子目录;总结文件大小: 还有一个使用os.listdir进行娱乐的oneliner ( 不包括子目录 ): 参考: os.path.getsize-以字节为单位给出大小 步行 os.path.islink 已更

  • 问题内容: 我正在尝试了解Windows 8上Python 2.7.6的异常。 这是我正在测试的代码,旨在在处创建一个新目录。如果目录已经存在,我想删除整个目录及其内容,然后创建一个新目录。 问题是,永远不会抛出异常。如果该目录尚不存在,则代码可以正常运行,但是如果该目录确实存在,则出现错误: WindowsError:[错误183]该文件已存在时无法创建该文件:“ My_New_Dir” 但是根

  • 本文向大家介绍Python使用psutil获取进程信息的例子,包括了Python使用psutil获取进程信息的例子的使用技巧和注意事项,需要的朋友参考一下 psutil是什么 psutil是一个能够获取系统信息(包括进程、CPU、内存、磁盘、网络等)的Python模块。主要用来做系统监控,性能分析,进程管理,像glances也是基于psutil写成的。 在不了解这个模块之前,我都是直接用subpr