programing

하위 프로세스 호출을 텍스트 파일로 전송하려면 어떻게 해야 합니까?

bestprogram 2023. 10. 29. 19:56

하위 프로세스 호출을 텍스트 파일로 전송하려면 어떻게 해야 합니까?

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

지금 제가 실행하고 있는 스크립트가 있습니다.실행하면 run.sh 에 인쇄물이 있기 때문에 이 선에 도달하면 인쇄가 시작됩니다.

이 파일을 텍스트 파일로 복사하려면 어떻게 해야 합니까? (가능한 경우 인쇄도 가능)

출력을 파일에 쓰려면 다음의 stdout-argument를 사용할 수 있습니다.subprocess.call.

둘 중 하나가 필요합니다.

  • None(기본값, stdout은 상위 스크립트에서 상속됨)
  • subprocess.PIPE(하나의 명령/프로세스에서 다른 명령/프로세스로 파이프를 연결하도록 allows)
  • 파일 개체 또는 파일 설명자(파일에 출력을 기록할 것)

파일을 열어서 다음과 같은 것이 필요합니다.open개체 또는 파일 기술자 정수를 전달합니다.call:

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

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

marcog에서 stderr도 재연결할 수 있다고 언급한 것처럼 stdout과 동일한 위치로 재연결할 수 있습니다.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

그래서...

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

그러면 당신은 당신이 원하는 것을 할 수 있습니다.myoutput

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

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