Seite 1 von 1

String übernehmen von einem Konsolenbefehl os.system()

Verfasst: Montag 7. Januar 2019, 15:48
von Mesquita
Hallo User,

ich habe mich heute hier angemeldet, da ich ein "Problem" + zwei Fragen habe und um Hilfe/Tipps bitten möchte.
Problem: Ich beginne gerade erst mich in Python einzuarbeiten ;-)
Fragen: Mein aktuelles Projekt ist ein Skript für einen Raspberry Pi B+. Dabei muss ich die aktuelle öffentliche IP Adresse des Providers ermitteln und als String auswerten. Der Konsolenbefehl zur Ermittlung lautet:

Code: Alles auswählen

curl -B4 http://checkip4.spdyn.de
Somit war mein Gedanke mittels:

Code: Alles auswählen

ip=(os.system("curl -B4 http://checkip4.spdyn.de")) oder
ip=(os.system('wget -4 -O - http://myip.dnsomatic.com/ 2> /dev/null'))
die IP als String auszulesen. Es geht nur leider nicht. Bei print (ip) ist das Ergebnis immer "0". Was mache ich falsch? Gibt es eine Möglichkeit einen String im RAM o.ä. abzulegen, das Programm zu schließen (Raspi läuft weiter), das Skript wieder zu starten und den Wert wieder einzulesen (Zugriffe auf SDCARD minimieren)?

Thomas

Re: String übernehmen von einem Konsolenbefehl os.system()

Verfasst: Montag 7. Januar 2019, 16:25
von Sirius3
Was Du brauchst ist subprocess.run:

Code: Alles auswählen

result = subprocess.run(["curl", "-B4", "http://checkip4.spdyn.de"], capture_output=True)
ip = result.stdout
Besser ist es aber, kein externes Programm zu benutzen, sondern das ganze mit Python-Mitteln, z.B. requests-Modul zu erledigen:

Code: Alles auswählen

import requests
ip = requests.get("http://checkip4.spdyn.de").text

Re: String übernehmen von einem Konsolenbefehl os.system()

Verfasst: Montag 7. Januar 2019, 17:03
von Mesquita
Danke für die Info. Das Modul requests muss ich nachinstallieren. Wie kann ich dies unter dem Raspi machen?

Thomas

Re: String übernehmen von einem Konsolenbefehl os.system()

Verfasst: Montag 7. Januar 2019, 17:13
von __deets__
Hast du mal.... gegoogelt? Wie man Python Module installiert? Das ist wirklich ausfuehrlichst beschrieben, auch und gerade fuer den Raspberry PI. Wenn du dabei auf Probleme stoesst, kannst du natuerlich gerne fragen. Aber unsere Aufgabe ist eher nicht, das Internet hier rein zu kopieren...

Re: String übernehmen von einem Konsolenbefehl os.system()

Verfasst: Montag 7. Januar 2019, 18:22
von Mesquita
Hallo _deets_
Deine Orientierung habe ich vernommen und "an"genommen. Im Vorfeld war ich auf Recherche, kam aber nicht zum Abschluss. Jetzt ist es mir klar auch warum. Ich suchte nicht gezielt nach Debian und war immer bei der Installation unter Windows. Mir hätte schon der Modulname python-requests geholfen. Ich wünsche Dir einen schönen Abend.
Thomas