2014-12-18 34 views
1

我想用Python結構打印目錄大小。我用下面的代碼使用python結構的linux機器的目錄大小

def getfilesize(): 
    with settings(user='hduser',password='cisco'): 
     path='/app/hadoop/tmp/myoutput/' 
     os.path.getsize(path) 

,但它引發我一個錯誤「沒有這樣的文件或目錄」

但我可以看到這個目錄

[email protected]:~$ cd /app/hadoop/tmp/myoutput/ 
[email protected]:/app/hadoop/tmp/myoutput$ ls 
taskTracker tt_log_tmp ttprivate userlogs 

我在這裏做任何語法時才錯誤?

回答

1

這不是一個語法錯誤,而是python代碼仍然在你的機器上執行,而不是在遠程機器上執行。因此調用os.path.getsize將檢查本地計算機上的路徑大小(它不存在的地方)。

相反,您需要使用fabric在遠程服務器上執行shell命令並捕獲它們的輸出。有一些常用用例的結構模塊,比如files module,所以你不必使用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]) 
+0

謝謝@kalhartt – navaz 2014-12-19 01:27:47