프로세스가 시작되고 프로세스가 실행되는 동안 해당 프로세스의 출력을 읽어야합니다. 출력 (선택 사항)을 인쇄하고 프로세스가 끝나면 출력을 반환 할 수 있기를 원합니다.프로세스가 실행되는 동안 프로세스의 출력을 읽습니다.
def call(command, print_output):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out = ""
while True:
line = process.stdout.readline().rstrip().decode("utf-8")
if line == '':
break
if print_output:
print(line)
out += line + "\n"
process.wait()
return process.returncode, out
이 코드는 (윈도우 7, 파이썬 3.3에서 테스트) 창에서 잘 작동하지만 리눅스에서 (우분투 12.04, 파이썬 3.2) 실패 : 여기에 지금까지 가지고 (유래에 다른 답변에서 합병) 것입니다. 리눅스에서 스크립트는 프로세스가 완료되면
line = process.stdout.readline().rstrip().decode("utf-8")
행에 멈 춥니 다.
코드에 무슨 문제가 있습니까? 프로세스가 process.poll()으로 끝났는지 확인하려고했지만 Linux에서는 None을 항상 반환합니다.
제 리눅스에서 3.2로 잘 돌아가며 닫히지 않은 fd를 닫지 않으면 믿어지지 않을 정도로 버그가있는 것 같습니다. 파이썬 프로그램을'strace' 할 때 무엇을 볼 수 있습니까? 또한 사용중인'command'의 값을 포함 할 수 있습니까? – phihag
귀하의 의견을 보내 주셔서 감사합니다! 문제는 실제로 명령입니다, 그것은 "svn export ..."이고 svn 프로세스는 처음으로 사용자 입력 (login, passwort)을 기대합니다. 그 죄송합니다... – osiris81