2015-10-04 61 views
1

我嘗試設置一個cron作業來rsync遠程文件(包含根級文件)到我的本地服務器,如果我在shell中運行該命令,它的工作原理。但是,如果我在Python運行此,我進入陌生的命令未找到錯誤:在閱讀遠程根級文件時發生Python rsync錯誤

這如果在一個shell中運行它的工作原理:

rsync -ave ssh --rsync-path='sudo rsync' --delete [email protected]:/tmp/test2 ./test 

但這Python腳本並不:

#!/usr/bin/python 

from subprocess import call 
.... 
for src_dir in backup_list: 
    call(["rsync", "-ave", "ssh", "--rsync-path='sudo rsync'", "--delete", src_host+src_dir, dst_dir]) 

它失敗:

local server:$ backup.py 
bash: sudo rsync: command not found 
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] 
rsync error: remote command not found (code 127) at io.c(226) [Receiver=3.1.0] 
... 
+0

你可以將它設置爲一個變量,並讓它打印輸出 – Anekdotin

+0

如何設置一個變量?我不確定你的意思 – kengcc

+0

我不認爲你需要rsync的sudo,而這個os.system更直接。 – Anekdotin

回答

0

這是最有可能的間距誤差或小東西,我調試命令的方式是確保打印出來。 OS.system是一個很好的選擇,雖然子進程更好,但它更容易。我不在我的計算機上測試它,但是可以像這樣設置子進程,或者使用此示例。這假設你在Linux或Mac上。

import os 

cmd = ('rsync -ave --delete root' +str(src_host) + str(src_directory) + '' + str(dst_dir)) #variable you can call anytime 
os.system(cmd) # actually performs the command 
print x # how to test and make sure