나는 주로 자신의 모듈을 작성했다. 주로 장고 사이트의 파일 필드를 다루고있다. mod_wsgi와 관련된 몇 가지 문제 (3.3로 업데이트 됨으로써 해결됨)를 만난 후에, 나는 실행할 코드를 얻었습니다. 오른쪽 필요한 모든 수입 후, 어떤 클래스 나 함수를 정의하기 전에, 나는 삭스의 가용성, 내 모듈의 일부 기능에 필수적인 audiocommandlinetool 테스트 :서브 프로세스가 OSError를 던지고있는 이유는 무엇입니까?
sox = 'path/to/sox'
test=subprocess.Popen([sox,'-h'], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
error=test.communicate()[1]
if error:
raise EnvironmentError((1,'Sox not installed properly'),)
이 잘했다. 지금은 10.04에 8.04에서 우분투를 업데이트하고 코드는 다음과 같은 오류 메시지가 던지는 subprocess.Popen 호출의 줄에 중단 : 이미 삭스의 실행 권한을 찾았다
File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
raise child_exception
OSError: [Errno 8] Exec format error
을, 내가 다른이 없다 이 해결책을 찾기위한 아이디어. 하위 프로세스 실행 권한을 제한 할 수 있습니까? 여기에 무슨 일이 일어날 지 아무 암시도 없나요?
'shell = True' 옵션을 사용하여 서브 프로세스를 실행하고 콘솔에서 평소와 같이 (예 :'test = subprocess.Popen ("/ path/to/sox -h" shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)'같은 결과? – Anders
흠.이 줄은'raise EnvironmentError ((1, 'Sox가 제대로 설치되지 않았습니다.'),'실행 중이며 EnvironmentError가 발생 중입니다. 이것은 developmentmentserver 및 apache/mod_wsgi에서 발생합니다. Sox는 문제없이 명령 줄에서 시작할 수 있으므로 samurailawngnome이 제안한대로 커널 플래그를 잃어버린 것을 상상할 수는 없습니다. 그리고 그것은 일반 사용자, su 및 www 데이터로 sox를 시작한 사용자 권한도 될 수 없습니다. – marue
'raise' 문은'error'에서 캡처 한 내용을 표시해야합니다. 합법적 인 sox 오류 메시지 일 수 있습니다. – Apalala