远程命令不返回python

时间:2016-10-17 02:15:22

标签: python python-2.7 ssh

我正在通过Python重启远程计算机,因为它是重启,当前的ssh会话被终止。请求未返回。我对回归并不感兴趣。

os.command(' sshpass -p密码ssh user @ host reboot')

代码正在执行重启,但当前会话被终止,脚本永远不会返回。

我可以做异步,只是忽略线程,任何其他简单的选项?

1 个答案:

答案 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...