import subprocess

devEnvPath = "DEVENV.exe 경로"
configName = "Release 나 Debug"
solutionPath = "VC 솔류션 (sln 파일) 경로"
solutionLogPath = "컴파일 결과가 저장될 로그 경로"

devEnvCmd = '%(devEnvPath)s "%(solutionPath)s" /build %(configName)s /out "%(solutionLogPath)s"' % locals()
devEnvProc = subprocess.call(devEnvCmd)


devenv 의 실행 결과는 stdout 으로 출력되는 것이 아니라 로그 파일로 저장됩니다.

그러므로 일단 실행 시켜놓은 다음 로그 파일을 계속 체크하면서
내용을 화면에 뿌려주어야 합니다. (tail -f log.txt 같은 기능을 만들어야 합니다)


def DevEnv_Compile(devEnvPath, solutionPath, configName, interval=0.5):
"VC2005 컴파일"
solutionHead, ext = os.path.splitext(solutionPath)
solutionLogPath = solutionHead + ".log"

# 로그 파일이 존재한다면 삭제한다 (삭제가 안된다면 이미 실행중일 가능성이 높음)
if os.access(solutionLogPath, os.R_OK):
if not RemoveFile(solutionLogPath):
print("DEVENV.MAY_BE_ALREADY_RUNNING")
return

# 컴파일러 실행
devEnvCmd = '%(devEnvPath)s "%(solutionPath)s" /build %(configName)s /out "%(solutionLogPath)s"' % locals()

print("compile:")
print("\t%s" % devEnvCmd)
devEnvProc = RunProcess(devEnvCmd)

try:
print "\twait_for_logging"
while devEnvProc.poll() is None:
if os.access(solutionLogPath, os.R_OK):
break
else:
time.sleep(interval)

print "\tstart"
logFile = open(solutionLogPath)
while devEnvProc.poll() is None:
oldPos = logFile.tell()
line = logFile.readline()
if line:
print("\t%s" % line.rstrip())
else:
time.sleep(interval)
logFile.seek(oldPos)
print "\tend"
except KeyboardInterrupt:
print("\tstop")
KillProcess(devEnvProc)


devenv 는 별도 프로세스로 실행되므로,
파이썬 스크립트가 중단되어도 devenv 는 종료되지 않습니다.

그러므로 ctrl+c 같은 예외 상황이 발생하면 아래에서 만든 KillProcess 로
devenv 를 종료시켜주어야 합니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/02/04 15:55 2009/02/04 15:55

# -*- coding:cp949 -*-
import os

def GetDevEnvPath():
environVS80CommonTools = os.environ["VS80COMNTOOLS"]
tokens = environVS80CommonTools.split(os.sep)
tokens = tokens[:-2] # 마지막 TOOLS 제거
tokens += ["IDE", "devenv.exe"]
return os.sep.join(tokens)

devEnvPath = GetDevEnvPath()
assert(os.access(devEnvPath, os.R_OK))
print(devEnvPath)


결과
C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.exe


환경 변수중 VS80COMNTOOLS 에 설정된 경로를 사용해
devenv.exe 위치를 만들어내는 프로그램입니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/02/04 12:17 2009/02/04 12:17