Hallo,
ich kriege das mit der Docu nicht auf die Reihe. Möchte die Ausgabe von
os.spawnlp(os.P_WAIT, 'ping', 'ping', '-c 1', 'www.westo.at')
in die Variable on packen um dann zu prüfen ob der Host online ist.
on = os.spawnlp(os.P_WAIT, 'ping', 'ping', '-c 1', 'www.westo.at')
funktioniert nicht. Danach gibt print on 0 aus.
Danke
Stolzi
Ausgabe in Variable packen
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Erstens: Ich würde das mit subprocess machen, s.: http://wiki.python.de/Neue_Features?#Subprocess
Zweitens: Warum machst du es nicht direkt über sockets? Wie man jetzt "nur" einen ping macht, weiß ich nicht, aber schau dir mal das an: http://www.python-forum.de/viewtopic.php?t=3262
Zweitens: Warum machst du es nicht direkt über sockets? Wie man jetzt "nur" einen ping macht, weiß ich nicht, aber schau dir mal das an: http://www.python-forum.de/viewtopic.php?t=3262
Nein, ich möchte schon das Ping vom OS nehmen. Aber ein Problem habe ich noch. Mit Linux funzt das ganze wunderbar:
Wenn ich das ganze aber unter Windows durchführe, dann öffnet er die Windows Eingabeaufforderung, führt den Ping aus, schließt sie und ich habe nix in der Variable process :-/
Kann ich dagegen was machen?
Danke
Code: Alles auswählen
>>> process = subprocess.Popen('ping -c 1 www.google.de', shell=True, stdout=subprocess.PIPE)
>>> process.wait()
0
>>> print process.stdout.read()
PING www.l.google.com (216.239.59.104) 56(84) bytes of data.
64 bytes from 216.239.59.104: icmp_seq=1 ttl=241 time=69.3 ms
--- www.l.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 69.325/69.325/69.325/0.000 ms
Kann ich dagegen was machen?
Danke
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ich hab es direkt mit SciTE, aber auch in der cmd gemacht. Mein Code ist nicht anders als deiner:
Code: Alles auswählen
import subprocess
process = subprocess.Popen('ping -n 1 www.google.de', shell=True, stdout=subprocess.PIPE)
process.wait()
print process.stdout.read()
Oh, dann könnte es daran liegen, daß ich nur ein
process = subprocess.Popen('ping -n 1 www.google.de')
gemacht habe, da
process = subprocess.Popen('ping -n 1 www.google.de', shell=True, stdout=subprocess.PIPE)
bei mir folgenden Fehler ergab:
Weißt du was da bei mir faul ist? In Linux hat genau der selbe Aufruf funktioniert...
process = subprocess.Popen('ping -n 1 www.google.de')
gemacht habe, da
process = subprocess.Popen('ping -n 1 www.google.de', shell=True, stdout=subprocess.PIPE)
bei mir folgenden Fehler ergab:
Code: Alles auswählen
Traceback (most recent call last):
File "<pyshell#15>", line 1, in -toplevel-
process = subprocess.Popen('ping -n 1 www.google.de', shell=True, stdout=subprocess.PIPE)
File "C:\Programme\Python24\lib\subprocess.py", line 533, in __init__
(p2cread, p2cwrite,
File "C:\Programme\Python24\lib\subprocess.py", line 593, in _get_handles
p2cread = self._make_inheritable(p2cread)
File "C:\Programme\Python24\lib\subprocess.py", line 634, in _make_inheritable
DUPLICATE_SAME_ACCESS)
TypeError: an integer is required
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Also ein shell=True und stdout=subprocess.PIPE muß auf jeden Fall dabei sein...
Die Fehlermeldung ist allerdings sehr merkwürdig! Keine Ahnung woran das liegen kann... Hast du 1zu1 meinen Source-Code genutzt? Dann würde ich sagen, ist vielleicht deine installierte Python-Version broken...
Die Fehlermeldung ist allerdings sehr merkwürdig! Keine Ahnung woran das liegen kann... Hast du 1zu1 meinen Source-Code genutzt? Dann würde ich sagen, ist vielleicht deine installierte Python-Version broken...
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Stolzi!Stolzi hat geschrieben:Weißt du was da bei mir faul ist? In Linux hat genau der selbe Aufruf funktioniert...
Du bist nicht der Erste, der "subprocess" unter Windows nicht zum Laufen bringt. Deshalb verwende ich weiterhin "popen" für so etwas.
Code: Alles auswählen
u = os.popen("ping www.tirol.at").read().decode(sys.stdin.encoding)
print u.encode(sys.stdout.encoding)
Gerold

PS: Ich verwende Windows 2000 mit Python 2.4
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.