2010-01-17 1 views
3

ac 파일을 html 파일로 변환하는 ac 콘솔 응용 프로그램이 있는데, c 파일 위치는 명령 줄 인수로 프로그램에 전달됩니다 (이 응용 프로그램은 Windows 용입니다 플랫폼)파이썬 GUI 응용 프로그램과 C 콘솔 응용 프로그램을 통합하는 가장 간단한 방법

사용자가 파일을 선택하고 처리를 위해 파일의 위치를 ​​전달할 수 있도록 Python GUI 응용 프로그램을 갖고 싶습니다.

저는 tkinter로 기본적인 파이썬 GUI를 만드는 법을 이미 알고 있습니다. 그러나 두 프로그램의 통합에 대한 유용한 정보를 찾아 낼 수는 없습니다.

아마도 pOpen() 메서드를 사용하여 문자열을 c app으로 파이프 할 수 있습니까? (그러나 나는 방법을 이해할 수 없다 ...)

참고 : Im는 python에 새로운 것이므로 코드 예제는 설명이 아니라 유용 할 수있다 (모든 Python 라이브러리 등에 익숙하지 않은 것처럼). 도움을 주시면 감사하겠습니다.

답변

10

아마도 subprocess 모듈이 필요합니다. 아주 최소한

:

import subprocess 
retcode = subprocess.call(["/path/to/myCprogram", "/path/to/file.c"]) 
if retcode == 0: 
    print "success!" 

이이 인수를 사용하여 프로그램을 실행 한 다음 그것의 반환 코드를 반환합니다.

subprocess.call은 프로그램이 완료 될 때까지 차단되므로 빠른 실행이 아닌 경우 전체 Tkinter GUI가 완료 될 때까지 다시 그리기가 중지됩니다.

고급 사용의 경우 subprocess.Popen을 사용할 수 있습니다. 명령이 완료 될 때까지 폴링이 필요하지만 적은 블로킹으로 처리 할 수 ​​있습니다.

당신의 C 프로그램은 표준 출력에 HTML을 인쇄하는 경우, 출력과 같이 파이프해야합니다

proc = subprocess.Popen(["/path/to/myCprogram", "/path/to/file.c"], 
         stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
output, err_output = proc.communicate() 
# output will now contain the stdout of the program in a string 
+0

빠른 답장을 보내 주셔서 감사합니다. 나는 subprocess.call 메서드를 테스트하고, 파일 이름 등을 하드 코딩하는 스크립트를 만들었고, 이제는 좀 더 파이썬과 Tkinter를 배울 필요가 있다고 생각했습니다. 그래서 모든 것을 함께 쓰는 방법을 알아낼 수 있습니다. 프로그래밍 기술은 거의 녹슬지 않습니다 ... – volting

+0

좋아, 나는 그걸 모두 모아서 만들었는데, 나는 훨씬 더 간단하게 생각했다. 구문 오류가있는 것으로 판명 된 몇 가지 문제가 있었는데, 내 dev 환경은 기본적으로 메모장으로 구성되어 있습니다. ++, 어쨌든 나는 시간이 지날수록 더 포괄적 인 해결책을 찾을 것입니다 ... 지금 그 Iv'e 내 초기 목표를 달성, 내가 어떻게 통합의 높은 수준을 달성 할 수에 관심이 있어요, Iv는 도스 창이 분할 초만 팝업 있도록 .pyw 확장명을 사용하지만, 그것은 좋을 것이다 전혀. 쉬운 방법이 있나요? – volting

+0

... dll을 만들고 파이썬 응용 프로그램에서 C 함수를 호출하는 문제없이이 작업을 수행 할 수 있습니다. – volting

2

이 당신이 acheive 수있는 여러 가지 방법이 있지만, 귀하의 경우 요구 사항 보인다 따라서 당신이 필요로하는 것은 모두 subprocess 모듈의 Popen을 사용하는 것입니다.

process = subprocess.Popen(['myutil', file_location]...) 
process.wait() 

당신이 호출자에게 다시 결과를 얻을 표준 출력에 대한 PIPE를 사용하고 서브 프로세스가 완료되면 그것에서 결과 데이터를 읽을해야하는 경우

.