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
. 위에서 언급 한 값 중 하나라도 작동하므로 다른 위치로 리디렉션 할 수 있습니다.
subprocess.call(["echo", "1", ">>", "t.txt"], shell=True)
작동해야합니다.
shlex.quote
더티 데이터를 서브 쉘에 전달 하고 있는지 살펴보십시오 .
with open("blah.txt","w") as f: subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
@Skurmedel
에 대한 옵션 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]
파이썬 매뉴얼 페이지 에는 사랑스럽고 유용한 정보가 많이 있습니다 .