사용자 및 경로 정보(예: "guest: ~/home/guest$") 인쇄와 명령 출력 사이에 다른 메커니즘이 있는지 궁금합니다.
"bash"의 stdin 및 stdout을 파이프하려고 하면 명령 출력만 얻을 수 있고 사용자 및 경로 정보는 얻을 수 없습니다.
self.p = Popen(["bash", "-i"], bufsize=1, stdin=PIPE, stdout=PIPE)
self.p.stderr = self.p.stdout
self.t = Thread(target=self.listen_stdout)
self.t.daemon = True # thread dies with the program
self.t.start()
def listen_stdout(self):
while True:
c = self.p.stdout.read(1)
print c,
위의 코드를 실행하고 을 작성하면 ls
폴더 self.p.stdin
의 내용만 인쇄되고 guest:~/home/guest$
.
ssh
및 와 동일한 비밀번호 프롬프트입니다 sudo
.
내가 무엇을 놓치고 있나요? 어떤 아이디어가 있나요?
답변1
bash
대화형 모드와 배치 모드가 있습니다. stdin이 터미널인지 여부에 따라 해당 모드로 들어갑니다.
bash # interactive
cat|bash # non-interactive: stdin is a pipe not a terminal
cat|bash -i # explicitly request interactive mode
대화형 모드에서는 bash
프롬프트(PS1 변수를 통해 구성 가능)가 인쇄되고 기타 사항은 보다 사용자 친화적인 환경을 위해 설정됩니다.
man bash
이러한 모드 간의 모든 차이점을 알아보려면 "대화형"을 읽고 찾아보십시오.