2015-09-04 166 views
-3

我正在使用rsync將文件從一臺服務器傳輸到另一臺服務器。現在我必須檢查目錄的大小並比較大小。如果目錄的大小相同,那麼rsync是成功的。我試過這樣做,但在路徑中找到了一些錯誤「杜:無法訪問」。任何人都可以請告訴我如何做到這一點。提前感謝。如何解決du:python中無法訪問錯誤?

下面是我的代碼:

path = '/mnt/rsyncap/Monte Carlo' 
size_cmd = 'ssh -l root -A '+ rh +' -i /Users/macbookpro/Development/serverkey/id_rsa du -sh %s' % path 
Size = subprocess.Popen(size_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,shell= True).communicate()[0] 

在上面的代碼,你可以看到path.In存在的,只是因爲它顯示在杜-SH線誤差之間「蒙地卡羅」的空間。如何處理目錄名稱之間的空間並獲取大小。如果目錄名稱中沒有空格,則它可以正常工作。

輸出:

du: cannot access `/mnt/rsyncap/Monte': No such file or directory 
du: cannot access `Carlo': No such file or directory 

所以,請幫助我,如果有人對此有什麼想法。

回答

1

Pass a list of arguments,不是一個字符串,並正確地逃避你的路徑。

import shlex 

size_cmd = [ 
    'ssh', '-l', 'root', '-A', rh, 
    '-i', '/Users/macbookpro/Development/serverkey/id_rsa', 
    'du -sh %s' % shlex.quote(path), 
] 
+0

你好,我試過這樣做,但仍然有一個錯誤。 'du -sh%s'%shlex.quote(path), AttributeError:'module'object has no attribute'quote' –

+0

@AnujPhophalia:你正在使用哪個版本的Python?如果它早於3.3,則使用'import pipes'並使用'pipes.quote'來代替。 – Ryan

+0

嗨,我使用python 2.7.6版本。即使我嘗試使用pipes.quote,但輸出是用法:ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:] port] [-e escape_char] [-F configfile] [ - 我的pkcs11] [-i identity_file] [-L [bind_address:] port:host:hostport] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [ -R [bind_address:] port:host:hostport] [-S ctl_path] [-W host:port] [-w local_tun [:remote_tun]] [user @] hostname [command] –

0

試試吧,path = '/mnt/rsyncap/Monte\ Carlo'

+0

順便說一下,我強烈建議您不要在路徑中添加任何空間。 –

+0

嗨,我試過,但它不工作。其他解決方案。 –

+0

'''path ='「/ mnt/rsyncap/Monte \ Carlo」''''不同的linux命令有不同的解決方案,以避免空間模糊 –

相關問題