2010-07-19 2 views
0

나는 비디오 상단에 그려지는 테두리 상자를 포함하는 XML 파일을 사용하는 한 장의 코코아 코드를 가지고 있습니다 (각 상자에는 연결된 프레임이 있습니다) . Cocoa 프로그램은 커맨드 라인에서 실행될 것입니다. (모든 매개 변수를 명령 행 인자로 취합니다)subprocess.call을 실행하여 코코아 명령 줄 응용 프로그램 실행

모든 XML 문서로 프로그램을 실행할 수 있습니다. 그러나 Python 스크립트 내에서 프로그램을 실행하려고하면 문제가 발생합니다. 예를 들어 :

with file("test.xml") as temp: 
    temp.write(doc.toprettyxml()) 
    # cval is my cocoa program to call, the other arguments are given to the Python script and parsed with optparser 
    command = ["./cval", "-o", options.output, "-i", str(options.interval), "-s", "%dx%d" % (options.width, options.height), "-f", str(options.frames), "-x", temp.name] 
    subprocess.call(command) 

는 때때로 이것은 다른 시간 (동작을 변경할 수있는 XML 문서에서 하나 개의 번호를 변경)하지 실패 내 'cval'을하게됩니다. 또한 거기에없는 XML 요소를 읽으려고 할 때 깨지는 것을 확인할 수 있습니다. 단지 'test.xml'을 열고 요소가 실제로 존재하는지 확인합니다.

그러나 'test.xml'을 사용하여 'cval'(Python 스크립트 외부)을 실행하면 정상적으로 작동합니다. 이것은 내가 subprocess.call을 할 때 이상한 일이 일어난다는 것을 믿게한다. 그러나 나는 그것이 무엇이 될 수 있을지 확신하지 못한다. 필자는 임의로 이상한 동작을 보이지만 본질적으로 더 복잡한 다른 작업 (즉, XML을 사용하지 않음)을 수행하는 다른 Cocoa/Python 믹스가 있습니다.

누군가가이 문제에 부딪혔거나이 이상 함을 디버깅하는 다음 단계를 알기를 바랍니다.

+0

어떤 오류 메시지가이 점점? –

답변

1

코드에서 원래 임시 파일을 사용했기 때문에 파일을 하위 프로세스로 전달하기 전에 파일을 닫을 수 없습니다. 그러나 대신 subprocess.call이 호출되기 전에 파일을 플러시해야합니다. 일치하지 않는 동작은 서로 다른 임계 값에서 자동 플러싱을 유발하는 입력 크기로 인해 발생할 수 있습니다.

코드를 읽어야합니다

with file("test.xml") as temp: 
    temp.write(doc.toprettyxml()) 
    temp.flush() 
    command = ["./cval", "-o", options.output, "-i", str(options.interval), "-s", "%dx%d" % (options.width, options.height), "-f", str(options.frames), "-x", temp.name] 
    subprocess.call(command) 
0

반환 코드 subprocess.call이 오류를 나타낼 때 "인쇄 명령"문을 넣으십시오. 실패 할 경우 하위 프로세스에서 실행중인 작업과 명령 줄에서 실행할 작업 사이에 차이가 있는지 확인하십시오. 또한 subprocess.call(command, shell=True)을 호출하여 명령이 셸에서와 같이 (문자열 서식 지정 등으로) 실행되도록하십시오.

+0

명령을 인쇄하면 다음과 같이 표시됩니다. [ './cval', '-o', 'valtest.mp4', '-i', '0.1', '-s', '800x600', '-f ','60 ','-x ','valtest.xml ']' 명령 줄에서 해당 명령을 실행하면 올바르게 작동합니다. ./cval -o valtest.mp4 -i 0.1 -s 800x600 -f 60 -x valtest.xml 'shell = True'를 사용해 보았는데 오류가 발생했습니다. –

+0

특정 오류 메시지가 다시 나타 납니까? 'subprocess.check_output'으로 프로그램을 실행하고, 실패하면'CalledProcessError' 예외 ('e')를 잡아 내고'e.output'을 출력하여 잘못 될 수있는 것을 볼 수 있습니다. – ars

+0

오류가 발생했지만 위에서 설명한대로 내 코코아 프로그램에서 기인합니다. 어떻게 든 Cocoa 프로그램 양식 subprocess.call을 실행하면 명령 행에서 호출 할 때와 완전히 동일한 입력으로 다르게 동작하게됩니다. 이 특별한 경우에는 Cocoa 프로그램이 읽고있는 XML 파일 (명령 행에서 전달되지 않음)이 올바르게 구문 분석되지 않는 것처럼 보입니다. –

관련 문제