[python] 하위 프로세스 호출을 텍스트 파일로 어떻게 파이프합니까?

subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"])

이제 내가 실행하는 스크립트가 있습니다. 내가 그것을 실행하고이 줄에 닿으면 run.sh에 인쇄가 있기 때문에 인쇄를 시작합니다.

이것을 텍스트 파일로 어떻게 파이프합니까? (가능하면 인쇄하십시오)



답변

출력을 파일에 쓰고 싶다면 stdout -argument of subprocess.call.

그것은 소요 None, subprocess.PIPE, 파일 객체 또는 파일 기술자를. 첫 번째는 기본값이며 stdout은 부모 (스크립트)에서 상속됩니다. 두 번째는 한 명령 / 프로세스에서 다른 명령 / 프로세스로 파이프 할 수 있습니다. 세 번째와 네 번째는 출력을 파일에 기록하려는 것입니다.

다음과 같은 파일을 열고 open객체 또는 파일 설명자 정수를 call다음으로 전달해야합니다 .

f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=f)

소켓 (gasp :))처럼 유효한 파일과 같은 객체가 작동 할 것이라고 생각하지만 시도한 적이 없습니다.

marcog 가 주석에서 언급 했듯이 stderr을 리디렉션하고 싶을 수도 있으므로 stderr=subprocess.STDOUT. 위에서 언급 한 값 중 하나라도 작동하므로 다른 위치로 리디렉션 할 수 있습니다.


답변

에 대한 옵션 popen은 다음에서 사용할 수 있습니다.call

args,
bufsize=0,
executable=None,
stdin=None,
stdout=None,
stderr=None,
preexec_fn=None,
close_fds=False,
shell=False,
cwd=None,
env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0

그래서…

subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=myoutput)

그런 다음 원하는 작업을 수행 할 수 있습니다 myoutput(파일 btw 여야 함).

또한 이와 같이 파이프 된 출력에 더 가까운 작업을 수행 할 수 있습니다.

dmesg | grep hda

다음과 같습니다.

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

파이썬 매뉴얼 페이지 에는 사랑스럽고 유용한 정보가 많이 있습니다 .


답변

도움이된다면 터미널에서 스크립트를 호출하여 모든 것을 파일로 출력 할 수도 있습니다. 이 방법:

$ /path/to/the/script.py > output.txt

파일을 덮어 씁니다. >>추가하는 데 사용할 수 있습니다 .

파일에도 오류가 기록되도록하려면 &>>또는을 사용하십시오 &>.


답변