2017-07-05 4 views
-2

Ich wollte Dateien für rund 300 Artikel herunterladen. Ein Beispiel ist unten:Curl-Ausführung in Python fehlgeschlagen

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

Dies ist die Seite öffnet und lädt den Inhalt und speichert sie als XML-Datei in meinem Ende

Ich habe versucht, eine Batch-Skript in Perl mit Systembefehl zu tun, wie

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

Aber es hat nicht funktioniert. Es gab einen Syntaxfehler, der vermutlich auf einfache Anführungszeichen zurückzuführen ist.

ich mit Python versucht,

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]) 

Es funktionierte nicht. Ich bekomme den Fehler, Datei existiert nicht. Auch wenn es funktioniert, wie kann ich schließen die

-b Cookies> Absrep1.xml‘

Teil in ihm?

Bitte helfen. Vielen Dank im Voraus,

AP

+0

Ich habe gerade herausgefunden, es ist einfacher mit os.system ("curl" http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1 '-b Cookies> Absrep1 .xml ") – Arun

Antwort

2

In Perl, sollten Sie in der Lage sein, dies zu verwenden:

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

, könnten Sie besser dran LWP oder möglicherweise sogar HTTP::Tiny Verwendung jedoch (es sei denn, Sie benötigen die Kekse) anstatt auszubrechen. Für fortgeschrittene Anwendungen gibt es auch .

2

Die Syntaxfehler ist mit ziemlicher Sicherheit bis auf die Anführungszeichen in dem Rufsystem:

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

Die einfachen Anführungszeichen müssen entweder entkommen oder alternative Klammern werden kann als doppelte Anführungszeichen oder benutzerdefinierte Klammern solche verwendet werden q oder qq, zB:

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

Es ist schwer, aus dem Kontext gegeben zu sagen, aber die Locke Aufruf in perl oder python Einwickeln geeignet wäre, weniger als opti Malansatz. Perl hat LWP, Python hat Anfragen und die Bash-Shell ist bereits gut gerüstet, um einfache Batch-Jobs auszuführen. Es kann am besten sein, bei einem einzelnen Dolmetscher zu bleiben, es sei denn, es gibt einen guten Grund, dies nicht zu tun.

Verwandte Themen