2014-02-10 1 views
1

여기 내 프로그램의 코드가 있습니다.Popen에있는 Popen

Windows에서 cmd.exe를 열고 다른 프로그램에 명령을 전달하고 출력을 캡처하고 매번 cmd.exe를로드하지 않고 구문 분석하려고합니다.

이 모든 예제는 파이썬 2를 사용하는 곳에서 발견되었으며 파이썬 3에서 파이썬 3에 대한 몇 가지 변경 사항이 있습니다.

#DOScmd is a list of command line parameters to type into command shell. 

p = subprocess.Popen('cmd.exe', 
       stdout=subprocess.PIPE, 
       stdin=subprocess.PIPE, 
       shell=True, 
       bufsize=0) 


myCall = ' '.join(DOScmd) + '\n' 
p.stdin.write(bytes(myCall, 'UTF-8')) 
searchLines = p.stdout.readlines()    
print(searchLines) 

나는 bowtie.exe 프로그램을 호출하고 있습니다. 이제 bowtie.exe가 충돌합니다. I/O 신을 분노하게 할지도 모른다고 생각합니다. 어떤 도움을 주셔서 감사합니다.

+0

* 나비 넥타이가 멋진을 * :-) 수 당신은 전체 오류 출력을 게시합니까? 'bowtie.exe '가 자신의 컴퓨터에서 작동합니까? – Carpetsmoker

+0

오류 출력 - 표준 창 오류 - "bowtie.exe 작동이 중지되었습니다 ... 창을 닫는 중입니다." Bowtie.exe는 명령 프롬프트에서 실행되며 프로그램을 실행 한 후 종료하는 p = subprocess.Popen (DOScmd)을 호출하여 작동 시켰습니다. 차이점은 매번 cmd.exe를 시작하면 오버 헤드가 크게 줄어들 기 때문에 하나의 cmd.exe를 열어두고 싶다는 것입니다. –

+0

질문 : "어떻게 subprocess.popen을 사용하여 프로그램을 열고 반복적으로 INPUT을 전달하고 Python 3에서 OUTPUT을 읽을 수 있습니까?" –

답변

0

Windows에서 cmd.exe를 열고 명령을 별도의 프로그램에 전달하고 출력을 캡처하고 매번 cmd.exe를로드하지 않고 구문 분석하려고합니다.

당신이 모든에 cmd.exe을 시작할 필요가 없습니다 cmd.exe 그런 다음 dir으로 내장되어 명령을 실행하지 않으려면

!

from subprocess import check_output 

for cmd in ["first.exe", "arg1", "arg2"], ["second.exe", ".."]: 
    output = check_output(cmd) 
    do_whatever_you_like_with(output)