2012-11-07 65 views
0

我想用python實現rsync。這是我的代碼。Rsync命令不能用python

#!/usr/bin/python 

import os 

url = raw_input("Paste your URL:") 
username = raw_input("Enter username:") 
#password = raw_input("Enter password:") 

source = username + "@" + url 
#print source 

print os.system('rsync -zvr --progress source /home/zurelsoft/R') 

邏輯很簡單:用戶輸入存儲在源文件中的url和用戶名,格式正確。源變量然後在rsync命令中使用。我輸入我的服務器的有效URL和用戶名,但我得到這個錯誤:

rsync: link_stat "/home/name/source" failed: No such file or directory (2) 

我做錯了什麼?

回答

4

您正在傳遞一個靜態字符串。不管用戶輸入什麼內容,你總是給rsync一個相同的命令行選項。你可能想source與值替換:

print os.system('rsync -zvr --progress {source} /home/zurelsoft/R'.format(source=source)) 

作爲一個側面說明,這可以用subprocess可以做的更好:

subprocess.call(['rsync','-zvr','--progress',source,'/home/zurelsoft/R']) 

它可能沒有關係,但你會以這種方式在程序中關閉巨大的安全漏洞(考慮用戶是否把; rm -rf ~;作爲他們的用戶名......),並且實踐良好的編程習慣總是一個好主意。

+0

太謝謝你了。 – sachitad

0

使用subprocess.call

subprocess.call(["rsync", "-avz", "--exclude-from", "/tmp/exclude-list.txt", source, destination]) 

,或者如果你需要出去放,

output = subprocess.Popen(["rsync", "-avz", "--exclude-from", "/tmp/exclude-list.txt", source, destination])