【问题标题】:Remote command does not return python远程命令不返回 python
【发布时间】:2016-10-17 10:33:51
【问题描述】:

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

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

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

我可以做一个异步并忽略线程,还有其他简单的选择吗?

【问题讨论】:

  • 阿法克,没有os.command;您实际上在使用什么,@ 987654322@ 也许?你试过用subprocess.check_call 代替吗?
  • 你能详细说明你期望发生的事情吗? “请求未返回”是什么意思?

标签: python python-2.7 ssh


【解决方案1】:

脚本没有返回,我很惊讶。在重新启动之前,远程应该重置连接。您可以运行进程 asyc,一个问题是没有被父进程清理的子进程变成僵尸(仍然占用进程表中的空间)。您可以添加一个计时器,让脚本有时间完成其脏活,然后在后台清理它。

请注意,我将该命令切换到参数列表并跳过设置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...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2014-12-01
    • 2021-02-26
    • 2015-10-22
    相关资源
    最近更新 更多