我正在通过Python重启远程计算机,因为它是重启,当前的ssh会话被终止。请求未返回。我对回归并不感兴趣。
os.command(' sshpass -p密码ssh user @ host reboot')
代码正在执行重启,但当前会话被终止,脚本永远不会返回。
我可以做异步,只是忽略线程,任何其他简单的选项?
答案 0 :(得分:1)
我很惊讶脚本没有回来。在重新启动之前,应通过遥控器重置连接。您可以运行asyc进程,一个问题是未被父级清理的子进程变为僵尸(仍占用进程表中的空间)。您可以添加一个Timer,让脚本有时间完成其工作,然后在后台清理它。
请注意,我将该命令切换到参数列表并跳过设置shell=True
。它只是意味着没有执行中间shell进程。
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', 'user@host', 'reboot')
threading.Timer(5, kill_process, args=(proc,))
# continue on your busy day...