문제

저는 Windows XP에서 C30 툴체인과 함께 조잡한 IDE(Microchip MPLAB)를 사용하고 있습니다.C 컴파일러에는 제어할 수 없을 정도로 시끄러운 출력이 있으며 출력 창에서 실제 경고와 오류를 찾아내기가 매우 어렵습니다.

컴파일러에 대한 인수를 수신하고 동일한 인수로 컴파일러를 호출하고 결과를 필터링하여 출력하는 Python 스크립트를 작성하고 싶습니다. 표준 출력.그런 다음 툴체인 설정에서 컴파일러 실행 파일을 내 스크립트로 바꿀 수 있습니다.IDE는 내 스크립트를 호출하고 필터링된 컴파일러 출력을 받습니다.

컴파일러를 실행하는 코드는 다음과 같습니다.

arguments = ' '.join(sys.argv[1:])
cmd = '%s %s' % (compiler_path, arguments)
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

문제는 인수의 따옴표가 스크립트 실행 시 사용된다는 것입니다. 따라서 IDE가 다음 인수를 사용하여 스크립트를 호출하는 경우:

main.c -o"main.o"

의 가치 인수 ~이다

main.c -omain.o

가장 확실한 해결책은 전체 인수 목록을 따옴표로 묶는 것입니다. 그러나 이를 위해서는 IDE에서 컴파일러 호출 코드를 수정해야 합니다.또한 배치 파일을 사용해 보았지만 9개의 매개 변수(%1~%9)만 허용할 수 있으며 컴파일러는 15개 이상의 매개 변수로 호출됩니다.

스크립트에서 정확히 동일한 인수를 프로세스로 전달하는 방법이 있습니까?

도움이 되었습니까?

해결책

당신의 껍질은 인용문을 먹고 있습니다 (파이썬 스크립트는받지 못합니다). 그래서 나는 그것들을 '변경하지'않는 것이 쉽지 않다고 생각합니다.

다른 팁

목록으로 Popen에게 명령 인수를 제공하십시오.

arguments = sys.argv[1:]
cmd = [compiler_path] + arguments
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

ChristopheD가 말했듯이 쉘은 따옴표를 제거합니다.

하지만 Popen을 사용할 때 문자열을 직접 만들 필요는 없습니다.자동으로 처리할 수 있습니다.대신 이렇게 할 수 있습니다:

import sys, subprocess
process = subprocess.Popen(sys.argv[1:], executable=compiler_path, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

하위 프로세스 모듈은 인수를 올바르게 전달하기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top