[PYTHON] paramiko ssh exec_command에서 지속적으로 출력을 얻습니다.
PYTHONparamiko ssh exec_command에서 지속적으로 출력을 얻습니다.
paramiko를 사용하는 원격 컴퓨터에서 ssh를 통해 장시간 실행되는 python 스크립트를 실행하고 있습니다. 매력처럼 작동하며 지금까지 문제가 없습니다.
불행히도 stdout (각각 stderr)은 스크립트가 끝난 후에 만 표시됩니다! 그러나, 실행 시간으로 인해, 나는 나중에 인쇄되지 않고 인쇄 될 때마다 각각의 새 행을 출력하는 것을 선호합니다.
remote = paramiko.SSHClient()
remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote.connect("host", username="uname", password="pwd")
# myScript produces continuous output, that I want to capture as it appears
stdin, stdout, stderr = remote.exec_command("python myScript.py")
stdin.close()
for line in stdout.read().splitlines():
print(line)
어떻게이 일을 성취 할 수 있습니까? 참고 : 당연히 출력을 파일로 파이프 할 수 있고 다른 ssh 세션을 통해이 파일을 '덜'처리 할 수 있지만 이것은 매우 못생긴 것이며 클리너, 이상적인 pythonic 솔루션이 필요합니다 :)
해결법
-
==============================
1.read ([size]) 문서에서 지정된대로 크기를 지정하지 않으면 EOF까지 읽 힙니다. 이렇게하면 명령이 끝날 때까지 스크립트가 대기하고 read ()에서 반환되고 출력이 인쇄됩니다.
read ([size]) 문서에서 지정된대로 크기를 지정하지 않으면 EOF까지 읽 힙니다. 이렇게하면 명령이 끝날 때까지 스크립트가 대기하고 read ()에서 반환되고 출력이 인쇄됩니다.
이 답변을 확인하십시오 : Python에서 EOF까지 루프하는 방법? File-like 오브젝트를 소모하는 방법에 대한 예제는 "While not EOF"를 수행하는 방법을 참조하십시오.
-
==============================
2.나는 비슷한 문제에 직면했다. 나는 paramiko에게 get_pty = True를 추가하여 그것을 해결할 수 있었다 :
나는 비슷한 문제에 직면했다. 나는 paramiko에게 get_pty = True를 추가하여 그것을 해결할 수 있었다 :
stdin, stdout, stderr = client.exec_command("/var/mylongscript.py", get_pty=True)
-
==============================
3.이 답변을 사용하는 방법에 대한 최소 및 완전한 작동 예제 (Python 3.6.1에서 테스트 됨)
이 답변을 사용하는 방법에 대한 최소 및 완전한 작동 예제 (Python 3.6.1에서 테스트 됨)
# run.py from paramiko import SSHClient ssh = SSHClient() ssh.load_system_host_keys() ssh.connect('...') print('started...') stdin, stdout, stderr = ssh.exec_command('python -m example', get_pty=True) for line in iter(stdout.readline, ""): print(line, end="") print('finished.')
과
# example.py, at the server import time for x in range(10): print(x) time.sleep(2)
다음을 사용하여 로컬 컴퓨터에서 실행
python -m run
from https://stackoverflow.com/questions/31834743/get-output-from-a-paramiko-ssh-exec-command-continuously by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 여러 웹 사이트에 하나의 Scrapy 스파이더 사용 (0) | 2018.10.28 |
---|---|
[PYTHON] Spyder의 간단한 Python 다중 처리 기능이 결과를 출력하지 않습니다. (0) | 2018.10.28 |
[PYTHON] Postgres - 누락 된 데이터가 0 인 행을 반환하는 방법? (0) | 2018.10.28 |
[PYTHON] 이미 페어링 된 것을 포함하여 리눅스에서 가까운 / 발견 가능한 블루투스 장치를 나열합니다. (0) | 2018.10.28 |
[PYTHON] anacaonda conda 명령을 사용하여 PyPi 패키지를 설치하는 방법 (0) | 2018.10.28 |