2016-05-05 8 views
0

in Python 2.7 verlassen, ich versuche zu:Python subprocess Befehl Echo zu laufen und das Fenster offen

  1. Ping eine IP-Adresse mit einem subprocess Befehl ohne ein Konsolenfenster zeigt.
  2. Wenn der Ping-Befehl subproccess etwas anderes als 0 zurückgibt, alarmiert die Benutzer, dass der Ping
  3. Alarm den Benutzer mit einem Echo-Befehl über ein subproccess
  4. fehlgeschlagen

Schritte 1 und 2 sind fertig. Ich habe Probleme mit Schritt 3. Wenn es eine bessere Möglichkeit gibt, dies zu tun als das, was ich versuche, bin ich offen für Vorschläge. Ich wollte einfach und schnell eine kurze Warnung für den Benutzer anzeigen.

Das große Problem mit Schritt 3 ist das Konsolenfenster erscheint, aber verschwindet sehr schnell. Idealerweise möchte ich das Fenster offen lassen, bis ein Benutzerfeedback empfangen wird, aber an dieser Stelle nehme ich auch eine Zeitüberschreitung. Hier

ist, was ich habe:

subprocess.call(['echo', 'One or more of the IPs failed to respond to their ping. Check Logs', ' & pause'])

Das Endergebnis ich suche ist der Benutzer bei ihrer täglichen Geschäft auf ihren PC, ein Pop-up auf, dass sie einen geplanten Ping-Versuch erzählt das Ziel nicht erreicht hat, gibt der Benutzer eine Rückmeldung, um das Popup zu schließen.

+1

in keinem Zusammenhang: Sie könnten ein GUI-Fenster verwenden, um die Benachrichtigung zB anzuzeigen, 'tkMessageBox.showwarning()' statt starten 'echo' Befehl in einer neuen Windows-Konsole. – jfs

+0

Ich habe ein paar Nachforschungen angestellt und gesehen, dass das eine Option war, aber ich dachte, dass das Senden eines Echo-Befehls schnell und einfach wäre, da ich bereits gelernt habe, wie man den Unterprozessbefehl verwendet. Aber vielleicht war es nicht einfacher! Ich werde das nächste Mal nachsehen müssen, wenn ich ein Fenster brauche. – Rdemps

+1

Wenn Sie nicht wissen, wie man 'tkMessageBox.showwarning()'; Frag einfach (als separate Frage). Ich würde versuchen, 'tkMessageBox zu importieren; tkMessageBox.showwarning ('title', 'text') 'und stellen Sie sicher, dass es nicht für Sie funktioniert. – jfs

Antwort

1

In einem Fenster Umgebung:

def cmdMessage(message): 
    subprocess.call('cmd /K "echo ' + message + '"') 

cmdMessage('One or more of the IPs failed to respond to their ping. Check Logs') 
+0

Das setzt eine Windows-Umgebung voraus. –

+0

Es tut:/Ich füge es zu meiner Antwort –

+0

Dies funktioniert perfekt. Ich habe mit der Option cmd/K experimentiert, konnte aber keine funktionierende Kombination finden. Dies macht jedoch Sinn. Vielen Dank! – Rdemps

0
subprocess.call(['echo', 'One or more of the IPs failed to respond to their ping. Check Logs', ' & pause']) 

Der & pause Teil zur Arbeit zu gehen ist nicht, denn das ist etwas, das die Shell (es Bash, Tcsh sein, was auch immer) zu interpretieren ist. Dies würde "& Pause" als zweites Argument an den Befehl echo senden.

Nur aus Neugier, warum drucken Sie nicht einfach Ihr Feedback in Python?

print "One or more of the IPs failed to respond to their ping. Check logs." 

Wenn Sie anhalten möchten, können Sie time.sleep vom time Modul verwenden. Wenn Sie für die Verwendung Eingabe warten wollen, können Sie das tun, mit raw_input:

print "One or more of the IPs failed to respond to their ping. Check logs. Hit enter to continue." 
raw_input() 
+0

Er will, dass es ein Fenster knallt, so dass der Benutzer es bemerken wird, so Drucken wird nicht wirklich helfen –

+0

Ich hatte das Gefühl, die & Pause wurde nur widerhallen und es war falsch, aber ich konnte es nicht sehen! : p Ni wäre richtig.Der Punkt ist, wenn alles richtig funktioniert, sollte der Benutzer nicht wissen, dass überhaupt etwas passiert ist. Ich plane dies jeden Morgen zu laufen, um nach einigen PCs zu sehen, aber ich interessiere mich nicht wirklich für das Ergebnis, wenn sie alle online sind. – Rdemps

+1

Das Problem ist wahrscheinlich nicht die separaten Argumente (unter Windows müssen sie sowieso wieder zu einer einzigen Zeichenfolge zusammengefügt werden), sondern nur die Tatsache, dass "echo" ein Shell-Befehl und keine ausführbare Datei ist. –