2016-10-17 2 views
1

파이썬을 통해 원격 시스템을 재부팅합니다. 재부팅이므로 현재의 ssh 세션이 종료됩니다. 요청이 리턴되지 않습니다. 나는 그 귀환에 관심이 없다.원격 명령이 파이썬을 반환하지 않습니다.

os.command ('sshpass -p 암호 ssh를 사용자 @ 호스트 재부팅')

코드는 재부팅을 수행 그러나 현재 세션이 사망하고 스크립트가 반환되지 않습니다.

나는 비동기를 수행 할 수 있으며 스레드, 다른 쉬운 옵션을 무시할 수 있습니까?

+0

Afaik에는 'os.command'가 없습니다. 당신은 실제로'os.system'을 사용하고 있습니까? 대신에'subprocess.check_call'을 시도해 보셨습니까? – Evert

+0

당신은 무슨 일이 일어날 것으로 기대 하는가에 대해 자세히 설명해 주시겠습니까? "요청이 반환되지 않았습니다"라는 의미는 무엇입니까? – Tolli

답변

1

스크립트가 반환되지 않습니다. 재부팅하기 전에 원격으로 연결을 재설정해야합니다. 당신은 프로세스를 실행할 수 asyc, 하나의 문제는 그들의 부모에 의해 정리되지 않은 subprocess가 좀비 (여전히 프로세스 테이블에서 공간을 차지함)입니다. 타이머를 추가하여 스크립트에서 더러운 작업을 수행 한 다음 백그라운드에서 정리할 수 있습니다.

이 명령을 매개 변수 목록으로 전환하고 설정 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 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... 
관련 문제