使用python结构的linux机器的目录大小

使用python结构的linux机器的目录大小,python,python-2.7,fabric,Python,Python 2.7,Fabric,我正在尝试使用PythonFabric打印目录大小。我使用了下面的代码 def getfilesize(): with settings(user='hduser',password='cisco'): path='/app/hadoop/tmp/myoutput/' os.path.getsize(path) 但它给了我一个错误“没有这样的文件或目录” 但是我可以看到这个目录 hduser@dn1:~$ cd /app/hadoop/tmp/myout

我正在尝试使用PythonFabric打印目录大小。我使用了下面的代码

def getfilesize():
    with settings(user='hduser',password='cisco'):
        path='/app/hadoop/tmp/myoutput/'
        os.path.getsize(path)
但它给了我一个错误“没有这样的文件或目录”

但是我可以看到这个目录

hduser@dn1:~$ cd /app/hadoop/tmp/myoutput/
hduser@dn1:/app/hadoop/tmp/myoutput$ ls
taskTracker  tt_log_tmp  ttprivate  userlogs

我是否在这里执行sytax错误?

这不是语法错误,而是python代码仍在您的机器上执行,而不是在远程机器上执行。因此,调用
os.path.getsize
就是检查本地机器上的路径大小(不存在)

相反,您需要使用fabric在远程服务器上执行shell命令并捕获它们的输出。有封装常见用例的结构模块,如,因此您不必使用bash命令。不幸的是,我不知道有什么能给你一个递归的目录大小。幸运的是,获取目录大小只需一行程序,因此我们可以执行以下操作:

def getfilesize():
    with settings(user='hduser', password='cisco'):
        output = run('du -s "/app/hadoop/tmp/myoutput/"')
        # output is the commands stdout as a (potentially multiline) string
        # for `du` it will look like: "183488582 /app/hadoop/tmp/mypoutput"
        size_in_bytes = int(output.split()[0])