Programing

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

crosscheck 2020. 10. 10. 09:37
반응형

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


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]

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

참고 URL : https://stackoverflow.com/questions/4856583/how-do-i-pipe-a-subprocess-call-to-a-text-file

반응형