Simulieren Sie den Ctrl-C-Tastatur-Interrupt in Python, während Sie in Linux arbeiten

8

Ich arbeite an einigen Skripten (in der Firma, in der ich arbeite), die in Hypervisoren geladen / entladen werden, um einen Code auszulösen, wenn ein Ereignis eintritt. Die einzige Möglichkeit, ein Skript tatsächlich zu entladen, besteht darin, Strg - C zu drücken. Ich schreibe eine Funktion in Python, die den Prozess automatisiert

Sobald die Zeichenfolge "done" in der Ausgabe des Programms angezeigt wird, sollte die vprobe beendet werden. Ich verwende subprocess.Popen , um den Befehl auszuführen:

%Vor%

Wie Sie sehen können, schreibe ich die Ausgabe im buff -Dateideskriptor, der im Lese + Schreibmodus geöffnet wurde. Ich überprüfe die letzte Zeile; Wenn es 'done' hat, töte ich es. Leider ist CTRL_C_EVENT nur für Windows gültig. Was kann ich für Linux tun?

    
Core_Dumped 23.10.2012, 06:17
quelle

3 Antworten

8

Ich denke, Sie können einfach das Linux-Äquivalent senden, signal.SIGINT (das Interrupt-Signal).

(Edit: Ich hatte etwas, das hier die Verwendung dieser Strategie zur Steuerung von Subprozessen entmutigte, aber bei genauerem Lesen klingt es so, als ob Sie bereits entschieden hätten, dass Sie in diesem speziellen Fall Control-C brauchen ... Also, SIGINT sollte es tun.)

    
Andrew Gorcester 23.10.2012, 06:21
quelle
3

In Linux kann der Ctrl-C-Tastatur-Interrupt programmgesteuert an einen Prozess gesendet werden, der die Popen.send_signal (signal.SIGINT) -Funktion verwendet. Zum Beispiel

%Vor%

Verwenden Sie Popen.communicate () nicht zum Blockieren von Befehlen.

    
Asif Hasnain 24.07.2015 18:03
quelle
1

Vielleicht verstehe ich etwas falsch, aber so wie Sie es tun, ist es schwierig, das gewünschte Ergebnis zu erzielen.

Was auch immer buff ist, du fragst es zuerst, dann verwendest du es im Kontext von Popen() und dann hoffst du, dass sich von maciv lineList füllt.

Was Sie wahrscheinlich wollen, ist etwas wie

%Vor%

Damit erhalten Sie ein Rohrende, das von Ihrem vprobe script gespeist wird, das Sie zeilenweise auslesen und entsprechend auf die gefundene Ausgabe reagieren können.

    
glglgl 23.10.2012 07:12
quelle

Tags und Links