2017-12-20 4 views
1

ich die folgenden Befehle in einer Zeile ausgeführt werden soll:Run Python, mit einem Parameter, auf einem cURL Befehl in einer Zeile

$ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O 
$ python ./awslogs-agent-setup.py --region eu-west-2 

Wie kann ich das tun?

habe ich versucht, die folgenden

$ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s | python --region eu-west-2 

Aber ich bekomme die Fehlermeldung:

Unknown option: -- 
+0

Sie vergessen haben, './Awslogs-agent-setup.py' nach' python', aber das ist nicht alles, es ist sieht aus wie './Awslogs-agent-setup.py' erwarten eine bestimmte Datei zu lesen auf Dateisystem - so müssen Sie es aktualisieren, so dass es curls Ausgabe direkt als Argument lesen kann – Arount

+1

@Arount 'awslogs-agent-setup.py' ist die Datei wird heruntergeladen, er möchte es direkt aus der' curl' Ausgabe eher ausführen dann legen Sie es in eine lokale Datei, um es auszuführen. – Barmar

Antwort

2

Sie könnten den python Interpreter von stdin lesen lassen die zusätzlichen Argumente neben mit /dev/stdin (ähnlich python -) und übergeben .

curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s |\ 
    python /dev/stdin --region eu-west-2 

Als Barmar Punkte aus /dev/stdin verwendet, könnte OS in python - mit diesem Fall spezifisch wäre Standard

curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s |\ 
    python - --region eu-west-2 

Als curl gibt den Dateiinhalt an stdout, können Sie es Leitung zum Standard über Eingabe des Interpreters.

oder benutzen Prozess-Substitution Funktion in bash (<()), mit dem Sie die Ausgabe eines Befehls behandeln lässt, als ob es sich um eine Datei von

python <(curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s) --region eu-west-2 
+2

Sie können '-' als Dateinamen verwenden. Python folgt der Standardkonvention der Behandlung von '-' als Dateiname, um Standardeingabe zu bedeuten, dann sind Sie nicht abhängig von dem OS-spezifischen'/dev/stdin'. – Barmar

0

Warum nicht einfach &&

verwenden zu lesen waren
curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O && python ./awslogs-agent-setup.py --region eu-west-2 

und wenn Sie, ohne eine Datei tun möchten später nur zu löschen, dies zu tun:

curl -s https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py | python /dev/stdin --region eu-west-2 

Execute bash script from URL

+0

Ich möchte nicht eine Datei nicht zu erstellen, nur um es zu löschen –

+0

@ YahyaUddin überprüfen Sie die bearbeitete Lösung. –

+0

Ihre zweite Lösung scheint die gleiche wie @Inian Antwort, außer es ist detaillierter und hat mehr Optionen –