2017-07-05 98 views
-2

我想下載大約300個項目的文件。下面是一個例子:在python中執行卷曲失敗

curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1' -b cookies > Absrep1.xml 

這將打開頁面並下載在我結束

我試圖做與系統命令的Perl批處理腳本的內容,並將其存儲爲XML文件,像

system('curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1' 
-b cookies > Absrep1.xml'); 

但是,它沒有工作。語法錯誤,我猜是由於單引號。

我試圖與蟒蛇,

import subprocess 
bash_com = 'curl "http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1" ' 
subprocess.Popen(bash_com) 
output = subprocess.check_output(['bash','-c', bash_com]) 

它沒有工作。我得到錯誤,文件不存在。即使它的作品,我怎麼能包括

-b餅乾>在它Absrep1.xml」

一部分?

請幫忙。由於提前,

AP

+0

我剛發現,用os.system更容易(「curl' .XML「) – Arun

回答

2

在Perl中,你應該能夠使用:

system(q{curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1' -b cookies > Absrep1.xml});

但是,您可能使用LWP或者甚至可能HTTP::Tiny(除非你需要變得更好餅乾)而不是炮轟。對於更高級的用途,還有WWW::Mechanize

2

的語法錯誤幾乎可以肯定是下降到系統調用的報價:

system('curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1' -b cookies > Absrep1.xml');

單引號要麼需要進行轉義或替代括號可以作爲雙引號或定製括號與使用,例如q或QQ,例如:

system(q{curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1' -b cookies > Absrep1.xml});

很難從給定的情況下說,但在包裝Perl或Python捲曲通話可能比OPTI少mal方法。 Perl有LWP,Python有請求,而且bash shell已經配備好運行簡單的批處理作業。除非有充分的理由不這樣做,否則最好堅持一位口譯員。