2014-09-24 154 views
0

我必須使用python腳本在Windows上使用cURL。我的目標是:使用Python腳本從遠程目錄中獲取所有文件...最好放到本地目錄中。之後,我會將每個文件與本地存儲的文件進行比較。我能夠一次獲得一個文件,但我需要從遠程目錄中獲取所有文件。 有人可以請教如何獲得多個文件? 我使用這個命令: curl.exe -o FILE1.TXT SFTP:///dir1/file1.txt -k -u用戶名:密碼使用捲曲下載多個文件

感謝

+0

除非使用CygWin,否則Windows沒有'curl'。 PowerShell 3+具有'Invoke-WebRequest'(別名爲'curl',但參數不同)。無論如何,如果你使用Python,爲什麼不使用Python('urllib')? – 2014-09-24 17:57:55

+3

如果你「必須」使用curl,這與python有什麼關係。 – cmd 2014-09-24 17:57:59

+0

即使您需要'curl'中的某些功能,您不知道如何映射到'urllib',是否有原因不想使用'pycurl'? – abarnert 2014-09-24 18:02:00

回答

0

我沒有測試過這一點,但我認爲你可以嘗試啓動每個shell命令作爲一個單獨的進程來同時運行它們。顯然,如果你有大量文件,這可能是一個壞主意,所以你可能需要更仔細地管理它。這裏有一些未經測試的代碼,當然你需要在get_file函數中編輯'cmd'變量。

from multiprocessing import Process 
import subprocess 

def get_file(filename): 
    cmd = '''curl.exe -o {} sftp:///dir1/{} -k -u user:password'''.format(filename, filename) 
    subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT) # run the shell command 

files = ['file1.txt', 'file2.txt', 'file3.txt'] 

for filename in files: 
    p = Process(target=get_file, args=(filename,)) # create a process which passes filename to get_file() 
    p.start() 
+1

感謝您的建議,但基於您的建議,我成功使用pysftp完成了我的目標 – susja 2014-09-25 21:34:26