Ich bin überrascht, dass das Skript nicht zurückkehrt. Die Verbindung sollte vor dem Neustart von der Fernbedienung zurückgesetzt werden. Sie können den Prozess asyc ausführen, das eine Problem ist, dass Subprozesse, die nicht von ihren Eltern aufgeräumt wurden, zu Zombies werden (nehmen immer noch Platz in der Prozesstabelle ein). Sie können einen Timer hinzufügen, um dem Skript Zeit für seine schmutzige Arbeit zu geben und es dann im Hintergrund zu bereinigen.
Beachten Sie, dass ich diesen Befehl auf eine Liste von Parametern umgeschaltet und die Einstellung shell=True
übersprungen habe. Es bedeutet nur, dass kein Zwischen-Shell-Prozess ausgeführt wird.
import sys
import subprocess as subp
import threading
import timing
def kill_process(proc):
# kill process if alive
if proc.poll() is None:
proc.kill()
time.sleep(.1)
if proc.poll() is None:
sys.stderr.write("Proc won't die\n")
return
# clean up dead process
proc.wait()
proc = subp.Popen(['sshpass', '-p', password, 'ssh', '[email protected]', 'reboot')
threading.Timer(5, kill_process, args=(proc,))
# continue on your busy day...
Afaik, es gibt kein 'os.command'; was nennst du eigentlich, 'os.system' vielleicht? Hast du es stattdessen mit 'subprocess.check_call' versucht? – Evert
Können Sie näher erläutern, was Sie erwarten? Was meinst du mit "die Anfrage wird nicht zurückgegeben"? – Tolli