Ich arbeite an einigen Skripten (in der Firma, in der ich arbeite), die in Hypervisors geladen/entladen werden, um ein Stück Code bei einem Ereignis auszulösen. Die einzige Möglichkeit, ein Skript tatsächlich zu entladen, ist Ctrl - C. Ich schreibe eine Funktion in Python, die den Prozess automatisiertSimulieren Sie Ctrl-C-Tastatur-Interrupt in Python während der Arbeit in Linux
Sobald es die Zeichenfolge "done"
in der Ausgabe des Programms sieht, sollte es die vprobe
töten. ich subprocess.Popen
bin mit dem Befehl auszuführen:
lineList = buff.readlines()
cmd = "vprobe /vprobe/myhello.emt"
p = subprocess.Popen(args = cmd, shell=True,stdout = buff, universal_newlines = True,preexec_fn=os.setsid)
while not re.search("done",lineList[-1]):
print "waiting"
os.kill(p.pid,signal.CTRL_C_EVENT)
Wie Sie sehen können, bin ich die Ausgabe in buff
Dateideskriptor in Lese + Schreibmodus geöffnet zu schreiben. Ich überprüfe die letzte Zeile; Wenn es 'done'
hat, töte ich es. Leider ist die CTRL_C_EVENT
nur für Windows gültig. Was kann ich für Linux tun?
FYI nicht Popen.communicate() zum Blockieren Befehle zur Verfügung: 're.search' mit einem konstanten String kann besser ausgedrückt als', während 'done' nicht in Linelist [-1]: ... ' – nneonneo
Yup, du hast Recht. Vielen Dank. –