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 python
Python은 pty를 갖게 되고 버퍼를 더 자주 플러시하지만 다른 문제도 발생하게 됩니다. 예를 들어 ssh에서 pty 할당이 작동하는 방식으로 인해 스크립트가 stdout으로 인쇄됩니다.)
당신은 또한 시도할 수 있습니다coreutils 명령 stdbuf 사용.