Python에서 하위 프로세스로 출력을 리디렉션하는 방법은 무엇입니까?
명령 줄에서 수행하는 작업 :
cat file1 file2 file3 > myfile
파이썬으로하고 싶은 것 :
import subprocess, shlex
my_cmd = 'cat file1 file2 file3 > myfile'
args = shlex.split(my_cmd)
subprocess.call(args) # spits the output in the window i call my python program
업데이트 : os.system은 권장되지 않지만 Python 3에서는 여전히 사용할 수 있습니다.
사용 os.system
:
os.system(my_cmd)
정말로 하위 프로세스를 사용하려는 경우 솔루션은 다음과 같습니다 (대부분 하위 프로세스에 대한 문서에서 가져옴).
p = subprocess.Popen(my_cmd, shell=True)
os.waitpid(p.pid, 0)
OTOH, 시스템 호출을 완전히 피할 수 있습니다.
import shutil
with open('myfile', 'w') as outfile:
for infile in ('file1', 'file2', 'file3'):
shutil.copyfileobj(open(infile), outfile)
원래 질문에 답하고 출력을 리디렉션하려면 stdout
인수에 대한 열린 파일 핸들을 다음으로 전달하십시오 subprocess.call
.
# Use a list of args instead of a string
input_files = ['file1', 'file2', 'file3']
my_cmd = ['cat'] + input_files
with open('myfile', "w") as outfile:
subprocess.call(my_cmd, stdout=outfile)
그러나 다른 사람들이 지적했듯이 cat
이러한 목적으로 외부 명령을 사용하는 것은 완전히 관련이 없습니다.
@PoltoS 일부 파일을 결합한 다음 결과 파일을 처리하고 싶습니다. 고양이를 사용하는 것이 가장 쉬운 대안이라고 생각했습니다. 더 나은 / pythonic 방법이 있습니까?
물론이야:
with open('myfile', 'w') as outfile:
for infilename in ['file1', 'file2', 'file3']:
with open(infilename) as infile:
outfile.write(infile.read())
한 가지 흥미로운 경우는 유사한 파일을 추가하여 파일을 업데이트하는 것입니다. 그러면 프로세스에서 새 파일을 만들 필요가 없습니다. 큰 파일을 추가해야하는 경우 특히 유용합니다. 다음은 파이썬에서 직접 teminal 명령 줄을 사용하는 한 가지 가능성입니다.
import subprocess32 as sub
with open("A.csv","a") as f:
f.flush()
sub.Popen(["cat","temp.csv"],stdout=f)
size = 'ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1:nokey=1 dump.mp4 > file'
proc = subprocess.Popen(shlex.split(size), shell=True)
time.sleep(1)
proc.terminate() #proc.kill() modify it by a suggestion
size = ""
with open('file', 'r') as infile:
for line in infile.readlines():
size += line.strip()
print(size)
os.remove('file')
subprocess 를 사용 하면 프로세스가 종료되어야합니다. 이는 예입니다. process를 종료하지 않으면 파일 이 비어 있고 아무것도 읽을 수 없습니다 . Windows에서 실행할 수 있습니다. 유닉스에서 실행됩니다.
참고 URL : https://stackoverflow.com/questions/4965159/how-to-redirect-output-with-subprocess-in-python
'IT story' 카테고리의 다른 글
.htaccess의 헤더 세트 Access-Control-Allow-Origin이 작동하지 않습니다. (0) | 2020.09.11 |
---|---|
Intent를 처리 할 활동이 없습니다. android.intent.action.VIEW (0) | 2020.09.10 |
Kubernetes 대시 보드에 로그인하는 방법은 무엇입니까? (0) | 2020.09.10 |
Nodejs : 객체를 복제하는 방법 (0) | 2020.09.10 |
MongoDB는 모든 데이터베이스를 삭제합니다. (0) | 2020.09.10 |