2016-07-14 2 views
0

기존 Python 2.7 스크립트에 기존 프로그램을 통합하려고합니다. 현재 프로그램이 성공적으로 명령 프롬프트에 다음을 입력하여 실행할 수 있습니다 : 이것은 모두 한 줄이Python을 사용하여 Windows 명령 프롬프트에서 .exe 파일 실행

 `C:\wisdem\plugins\JacketSE\src\jacketse\SubDyn\bin\SubDyn_Win32.exe C:\wisdem\plugins\JacketSE\src\jacketse\SubDyn\CertTest\Test04_TrialD3.txt` 

; .txt 파일에는 .exe 파일에 필요한 입력이 들어 있습니다. 나는이 일을 os.system("C:\wisdem\plugins\...)

subprocess.Popen("C:\wisdem\plugins\...", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE).stdout.read()

모두를 사용하여 시도했지만 어느 하나 노력하고 있습니다. 또한 명령 프롬프트의 출력이 파이썬으로 인쇄되도록해야합니다. 어떤 도움이라도 대단히 감사하겠습니다!

+0

''\ b ''이 무엇을 의미하는지 생각해보십시오. 명령에 원시 문자열을 사용하십시오 (예 : 'p = subprocess.Popen (r "C : \ wisdem \ plugins \ ...", ...)'. 또한'shell = True'를 사용하지 마십시오. 'stdin' 또는'stderr'에 파이프를 사용하지 않는다면 사용하지 마십시오. 그대로 두거나 null 디바이스에 대한 파일 설명자를 전달하십시오 (예 : 'fd_null = os.open (os.devnull, os.O_RDWR)'. 두 개 이상의 표준 파일을 파이프하는 경우 교착 상태를 피하기 위해'communicate()'메소드를 사용하십시오. – eryksun

답변

0
import os 
print os.popen(r'''echo "hello"''').read() 

나는 트리플 쿼트 내에 완전한 명령을 넣고 시도하는 것이 좋습니다. 이렇게하면 명령이 실행 된 다음 출력이 인쇄됩니다.

접두어 r과 함께 문자열 리터럴을 사용하면 이상한 이스케이프 문자 문제가 발생하는 데 도움이됩니다.

위 코드를 사용할 때 보안 문제가있을뿐만 아니라 버전 2.6 이후로 os.popen이 사용되지 않을 것이라는 점에 유의하십시오. 그러나 2.7의 빠른 로컬 스크립트의 경우 위의 내용만으로 충분합니다.

+0

감사합니다. 이 작동하는 것 같았다 : – CBroslawski

+0

인쇄 os.popen (r '' 'C : \ wisdem \ plugins \ JacketSE \ src \ 재킷 \ SubDyn \ bin \ SubDyn_Win32.exe C : \ wisdem \ plugins \ JacketSE \ src \ jacketse \ SubDyn \ read() – CBroslawski

+0

또한 subprocess.Popen (r '' 'C : \ wisdem \ plugins \ JacketSE \ src ...' ') 또는 subprocess.call (r' ''C : \ wisdem \ plugins \ JacketSE \ src ... '' '), 둘 다 .exe를 실행했지만 결과를 파이썬에 반환하지 않았습니다. 이것은 하위 프로세스가 os.popen보다 현대적이고 강건 해 보이기 때문에 바람직하지 않습니다. 그럼에도 불구하고 도움에 감사드립니다! – CBroslawski

관련 문제