Python에서 하위 프로세스를 사용한 출력 리디렉션: 파일과 터미널을 동시에
Python의 subprocess.call 기능을 활용하여 여러 실행 파일을 실행할 때 사용자는 다음을 원할 수 있습니다. stdout과 stderr이 동시에 지정된 파일과 터미널에 기록됩니다.
이를 달성하려면 subprocess.call을 사용하는 대신 stdout=PIPE 인수와 함께 Popen 함수를 직접 사용할 수 있습니다. 이렇게 하면 p.stdout에서 읽을 수 있습니다.
import sys from subprocess import Popen, PIPE def tee(infile, *files): for line in iter(infile.readline, b""): for f in files: f.write(line) def teed_call(cmd_args, stdout=None, stderr=None): p = Popen( cmd_args, stdout=PIPE if stdout is not None else None, stderr=PIPE if stderr is not None else None ) if stdout is not None: tee(p.stdout, stdout, getattr(sys.stdout, "buffer", sys.stdout)) if stderr is not None: tee(p.stderr, stderr, getattr(sys.stderr, "buffer", sys.stderr)) for t in threads: t.join() return p.wait()
이 수정된 기능을 사용하면 사용자는 터미널에 인쇄하는 동안 stdout 및 stderr에 대한 파일을 지정할 수 있습니다. 예를 들면 다음과 같습니다.
outf, errf = open("out.txt", "wb"), open("err.txt", "wb") assert not teed_call(["cat", __file__], stdout=None, stderr=errf) assert not teed_call(["echo", "abc"], stdout=outf, stderr=errf, bufsize=0) assert teed_call(["gcc", "a b"], close_fds=True, stdout=outf, stderr=errf)
위 내용은 Python에서 stdout과 stderr을 하위 프로세스에서 파일과 터미널로 동시에 리디렉션하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!