프로세스에서 대화식 프로그램을 호출하고 프로세스가 실행되는 동안 해당 출력을 인쇄해야합니다. 지금까지,이 기능을하고 있어요 :대화 형 프로그램을 호출하고 즉시 출력을 표시하는 방법
def call(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
line = process.stdout.readline().rstrip().encode("utf-8")
if line == '':
break
print(line)
process.wait()
return process.returncode
문제이며, 대화 형 프로그램은 사용자 입력을 기다릴 수 있으며, 예를 들어, 질문 후 새 줄을 추가하지 않습니다 :
인증 영역 : ...> ...
아이디 :
"사용자 이름 :"후,이 새로운 라인이없고 프로그램이 사용자 입력을 기대하고 그래서 내 코드 D oes는 "사용자 이름 :"을 표시하지 않습니다.
readline() 대신 bytesavailable 및 read (size)와 같은 함수가 필요하지만 bytesavaiable()과 같은 함수는 없습니다.
대신'통신 '을 사용하십시오. 또한 버퍼링 문제 (파이프가 꽉 찼기 때문에 프로그램이 멈추는 문제)를 방지합니다. – Cameron
@Cameron'communicate'는 프로그램이 종료 될 때까지 출력이 필요하지 않으면 (프로세스가 완료된 후에 만 리턴하기 때문에) 작동합니다. – Amber
@Amber : 허, 블로킹이 아닌 블로킹을 할 수 있었지만 문서가 당신에게 옳았다는 것을 보여주었습니다 :-) – Cameron