스크립트에서 "-a"와 같은 명령 줄 매개 변수를 사용하여 .exe를 실행하려면 다음을 입력하십시오..exe의 출력을 파이썬의 파일로 리디렉션하는 방법은 무엇입니까?
프로그램의 표준 출력을 파일로 리디렉션 하시겠습니까?
어떻게 구현할 수 있습니까?
스크립트에서 "-a"와 같은 명령 줄 매개 변수를 사용하여 .exe를 실행하려면 다음을 입력하십시오..exe의 출력을 파이썬의 파일로 리디렉션하는 방법은 무엇입니까?
프로그램의 표준 출력을 파일로 리디렉션 하시겠습니까?
어떻게 구현할 수 있습니까?
당신은 하위 프로세스를 사용하여 파일에 직접 리디렉션 할 수 있습니다 :
3) 다시 기본값으로 표준 출력을 리디렉션해야합니다.
import subprocess
with open('output.txt', 'w') as output_f:
p = subprocess.Popen('Text/to/execute with-arg',
stdout=output_f,
stderr=output_f)
가장 쉬운 방법은 os.system("the.exe -a >thefile.txt")
이지만 다른 많은 방법이 있습니다. 예를 들어 subprocess
모듈을 표준 라이브러리에 사용할 수 있습니다.
다음과 같이 할 수 있습니다. 예 : 당신이 열려진 비슷한 일을 할 수
p = subprocess.Popen(["ls","-l"],stdout=subprocess.PIPE)
print p.stdout.read() # or put it in a file
LS -l의 출력 (또는 다른 명령) 읽기/표준 입력
하지만 알렉스는 파일에 당신은 단지 그것을 원하는 경우 언급 한 바와 같이, 단지 cmd를 리디렉션
파일로 출력장기간 실행되는 프로세스 인 경우 stdout.read()가 블로킹한다는 점에 유의하십시오. 스크립트가 다른 작업을 계속하거나 '라이브'결과에 응답 할 경우 다른 스레드에서 하위 프로세스를 실행하려고합니다. – mavnn
실행 파일을 실행하고 결과를 기다리고 싶다면 Anurag의 해결책이 가장 좋습니다. 도착한 각 출력 라인에 응답해야하고 다음 작업이 수행되었음을 알았습니다.
1) 쓰기 (텍스트) 메소드로 객체를 만듭니다. stdout을 리디렉션 (sys.stdout = obj)합니다. write 메소드에서 도착한 출력을 처리하십시오.
2) 다음과 같은 코드로 별도의 스레드에서 메소드를 실행하면 표준 출력 리디렉션했기 때문에
p = subprocess.Popen('Text/to/execute with-arg', stdout=subprocess.PIPE,
stderr=subprocess.PIPE, shell=False)
while p.poll() is None:
print p.stdout.readline().strip()
는, 파이프 라인으로 당신의 쓰기 방법 라인에 출력을 보내드립니다. 줄 바꿈을 할 것이라는 확신이 없다면 읽기 (양)도 효과가 있다고 생각합니다. = sys.stdout __sys.stdout__
제목 (.exe)은 Windows에서 문제가있는 것처럼 들리지만. 필자는 대답 (stdout/stderr 인수로 subprocess.Popen())을 파이썬 2.7이 설치된 Mac OS X (10.8)에서 작동하지 않는다고 공유해야했습니다.
subprocess.check_output() (python 2.7 이상)을 사용하여 작동하게해야했습니다. 예 : 프로그램이 완료되면이 용액을 모두 적산 출력을 기록하는
import subprocess
cmd = 'ls -l'
out = subprocess.check_output(cmd, shell=True)
with open('my.log', 'w') as f:
f.writelines(out)
f.close()
참고. 실행 중에 로그 파일을 모니터링하려는 경우. 다른 것을 시도하고 싶을 수도 있습니다. 내 경우에는 최종 결과 만 신경 썼습니다.
어떻게 그 서브 프로세스를 사용합니까? – Kim
http://docs.python.org/library/subprocess.html#replacing-os-system을 참조하십시오. –
os.system을 사용하여 작업을 리디렉션 할 때 운영 체제간에 파이프 기호가 다르다는 것을 기억해야합니다. – mavnn