외부 bash 스크립트를 실행해서 로그를 실시간으로 모니터링해야 합니다. 현재는 프로세스가 완전히 종료된 후에만 결과가 한꺼번에 출력됩니다.
코드:
import subprocess
# dummy.sh: for i in {1..5}; do echo "Step $i"; sleep 1; done
cmd = ["sh", "dummy.sh"]
process = subprocess.run(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
print(process.stdout)
오류: 스크립트 실행 중에는 아무것도 출력되지 않다가, 5초 뒤 종료 시점에 모든 로그가 한 번에 출력됨.
시도: `stdout=subprocess.STDOUT` 설정 및 `shell=True` 옵션 적용.
질문: `subprocess.run` 대신 어떤 방식을 써야 stdout을 실시간으로 print 할 수 있습니까?
댓글7
-
빗방울
2026.10.30 21:34
-
빗방울
2026.10.30 21:35
아니면 그냥 stdout=None으로 두고 쉘에 바로 뿌리는게 젤 편함ㅋㅋ
굳이 파이썬 변수로 담아야 하는 거 아니면 그게 직빵인듯요.
-
빗방울
2026.10.30 21:44
ㄹㅇㅋㅋ 그냥 터미널에 바로 찍히게 두는 게 정신건강에 이롭긴 함요.
-
빗방울
2026.10.30 23:33
혹시 bash 스크립트 자체에서 버퍼링 걸린 거 아님?
stdbuf 같은 걸로 버퍼 끄고 실행해봐야 될 것 같네요ㅋㅋ
안 그러면 Popen 써도 한참 뒤에 나올 수도 있음ㄷㄷ
-
빗방울
2026.10.31 00:53
파이썬 3.7 이상이면 Popen 쓰면서 stdout 읽을 때 flush 옵션 같은 것도 한번 확인해보세요.
그거 안 맞으면 코드 짜도 로그 늦게 뜨는 경우 종종 있더라고요ㅋㅋ
고생하시네요ㄷㄷ
-
빗방울
2026.10.31 03:21
그냥 단순 모니터링이면 `subprocess.run` 말고 `os.system` 쓰는 게 제일 속 편할 수도 있음ㅋㅋ
근데 제어할 게 많으면 Popen 가야 하는 게 맞긴 하네요ㄷㄷ
화이팅하시길요ㅋㅋ
-
빗방울
2026.10.31 03:29
근데 쉘 스크립트 안에서 echo 뒤에 -n 붙이거나 하는 식으로 출력 방식 바꾸면 좀 다를 수도 있을 듯요ㅋㅋ 한번 확인해보세요ㄷㄷ
모든 이야기1455
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
run은 원래 다 끝날 때까지 기다리는 함수임ㅋㅋ
subprocess.Popen 쓰고 while문 돌려서 stdout.readline으로
한 줄씩 읽어와야 실시간으로 뜰걸요?