Удаленная команда не возвращает python

#python #python-2.7 #ssh

#python #python-2.7 #ssh

Вопрос:

Я перезагружаю удаленную машину через Python, так как это перезагрузка, текущий сеанс ssh прерывается. Запрос не возвращается. Однако меня не интересует возврат.

os.command(‘sshpass -p пароль пользователя ssh @ перезагрузка хоста’)

Код выполняет перезагрузку, однако текущий сеанс завершается, и скрипт никогда не возвращается.

Я могу выполнить асинхронность и просто игнорировать поток, любые другие простые варианты?

Комментарии:

1. Afaik, нет os.command ; возможно, что вы на самом деле используете os.system ? Вы пробовали subprocess.check_call вместо этого?

2. Можете ли вы подробнее рассказать о том, что вы ожидаете? Что вы подразумеваете под «запрос не возвращается»?

Ответ №1:

Я удивлен, что сценарий не возвращается. Перед перезагрузкой удаленное соединение должно быть сброшено. Вы можете запустить процесс asyc, единственная проблема заключается в том, что подпроцессы, не очищенные их родителями, становятся зомби (все еще занимают место в таблице процессов). Вы можете добавить таймер, чтобы дать сценарию время выполнить свою грязную работу, а затем очистить его в фоновом режиме.

Обратите внимание, что я переключил эту команду на список параметров и пропустил настройку shell=True . Это просто означает, что промежуточный процесс оболочки не выполняется.

 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 dien")
            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...