SSH를 통해 실시간으로 스크립트 출력 보기

SSH를 통해 실시간으로 스크립트 출력 보기

SSH를 사용하여 원격 컴퓨터에서 로컬 스크립트를 실행하려고 합니다.

printdelay.py이것이 제가 실행하려고 하는 Python 스크립트 라고 가정해 보겠습니다 ( ).

from time import sleep  
print("The first line")  
sleep(10)  
print("The second line")

다음과 같이 스크립트를 실행합니다.

cat printdelay.py | ssh user@host python

스크립트가 실행되지만 전체 스크립트 실행이 완료된 후에만 명령 출력이 표시되는 것을 확인했습니다. 실행되는 스크립트의 출력을 보고 싶습니다. 즉, 인쇄되는 두 줄 사이에 지연이 있습니다.

나는 알아차렸다

cat printdelay.py | ssh -t -t user@host python

내가 찾고 있는 것과 비슷하지만 단순한 라인 인쇄 대신 의사 터미널에 많은 소음이 보입니다. 나는 이것을 할 수 있는 더 좋은 방법이 있다고 생각한다.

답변1

Python 플래그를 사용하십시오 -u.

cat printdelay.py | ssh user@host python -u

당신이 보고 있는 행동은 다음과 같습니다.printf이 함수 계열은 stdout이 대화형 장치(예: tty 또는 pty)가 아닐 때 stdout에 쓸 때 버퍼를 덜 자주 플러시합니다.. 당신이 발견했듯이, Python에 pty를 제공하는 것 외에는 할 수 있는 일이 많지 않습니다. 이것은 작동합니다:

scp printdelay.py user@host:/tmp/timedelay.py
ssh -t user@host python /tmp/timedelay.py

(만약 이렇게 하면 cat timedelay.py | ssh -tt user@host pythonPython은 pty를 갖게 되고 버퍼를 더 자주 플러시하지만 다른 문제도 발생하게 됩니다. 예를 들어 ssh에서 pty 할당이 작동하는 방식으로 인해 스크립트가 stdout으로 인쇄됩니다.)

당신은 또한 시도할 수 있습니다coreutils 명령 stdbuf 사용.

관련 정보