2012-06-13 3 views
0

저는 Python을 처음 접하고 뭔가 알아 내려고합니다. 필자가 작성한 C 코드의 매개 변수 테스트를 수행하기위한 빠른 스크립트를 작성하려고합니다.python의 subprocess.call에서 인수를 사용하여 C 코드를 실행하는 데 문제가 있습니다.

내 C 코드를 실행하기 위해 subprocess.call을 사용하려고 할 때가 왔습니다. C 코드에는 코드 자체 내에서 열린 파일의 이름 인 하나의 인수가 있습니다. 예를 들어

:

filename = myclass.path + myclass.inputname 
subprocess.call(["./code", filename]) 

이 코드를 실행하며, 올바른 파일 이름을 통과하지만, C 코드에서 모든 파일에서 정보의 읽을 수 없습니다. 내가 좋아하는 뭔가를 전달하는 경우 : "파일 이름이"나는 파이썬에서 인쇄 명령을 사용할 때 인쇄되는 것을 실제로 쉘에

./code "filename" 

을, 그냥 잘 작동합니다. 무슨 일이 일어나고 있는지

in = fopen(argv[1], "r"); 
fscanf(in, "%s %d %d", variable1, &variable2, &variable3); 

어떤 생각 : 그냥 완전한 존재의 이익을 위해

, 여기 내 C 코드 내 관련이있는 라인은?

+0

은 "filename"이 따옴표와 함께 또는 따옴표없이 인쇄됩니까? 쉘은 제거 할 것이지만 서브 프로세스는 제거하지 않습니다. – mgilson

+2

@mgilson과 동의 :'filename'은 어떻게 생겼습니까? 특수 문자 문제 일 수도 있습니다. (또한 myclass.path + myclass 대신에 ['os.path.join'] (http://docs.python.org/library/os.path.html#os.path.join)을 사용할 수도 있습니다. 입력 이름'). – Dougal

+1

'myclass.path'에 후행 슬래시가 있습니까? 경로와 파일 이름 사이에 슬래시를 추가해야 할 수도 있습니다. –

답변

0

C 코드에 printf("%s\n", argv[1]);을 추가하면 수신중인 내용을 볼 수 있습니다. 파일 이름에 공백이 포함되어 있습니까? 경우에 따라 argv[2]을 확인하고 싶을 수도 있습니다.

또한 fopen()의 반환 값을 확인하십시오. NULL이 맞나요? (이 경우 파일을 열지 못했습니다).

1

fopen (절대 경로 이름을 사용하고 있습니까?) 결과를 확인하지 않는 것 외에는 fscanf이 잘못되었습니다. 시도 :

fscanf(in, "%s %d %d", variable1, &variable2, &variable3); 

또 다른 가능성은 파일이 fscanf 예상하는 형식이 아닌 것입니다 - 그것은 그것에 대해 특히 까다 롭고이며이 잘못되면 쉽게 프로그램을 중단 할 수 있습니다.

관련 문제