2011-03-17 4 views
6

나는 주로 자신의 모듈을 작성했다. 주로 장고 사이트의 파일 필드를 다루고있다. 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 

을, 내가 다른이 없다 이 해결책을 찾기위한 아이디어. 하위 프로세스 실행 권한을 제한 할 수 있습니까? 여기에 무슨 일이 일어날 지 아무 암시도 없나요?

+2

'shell = True' 옵션을 사용하여 서브 프로세스를 실행하고 콘솔에서 평소와 같이 (예 :'test = subprocess.Popen ("/ path/to/sox -h" shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)'같은 결과? – Anders

+0

흠.이 줄은'raise EnvironmentError ((1, 'Sox가 제대로 설치되지 않았습니다.'),'실행 중이며 EnvironmentError가 발생 중입니다. 이것은 developmentmentserver 및 apache/mod_wsgi에서 발생합니다. Sox는 문제없이 명령 줄에서 시작할 수 있으므로 samurailawngnome이 제안한대로 커널 플래그를 잃어버린 것을 상상할 수는 없습니다. 그리고 그것은 일반 사용자, su 및 www 데이터로 sox를 ​​시작한 사용자 권한도 될 수 없습니다. – marue

+0

'raise' 문은'error'에서 캡처 한 내용을 표시해야합니다. 합법적 인 sox 오류 메시지 일 수 있습니다. – Apalala

답변

1

Apala의 힌트로 문제가 해결되었습니다. 같은 일이 다시 발생하면 다른 버전의 sox를 ​​시도하십시오. sox가 명령 행에서 작업 중이더라도 하위 프로세스에 문제가 발생할 수 있습니다.

+0

오늘도 이와 비슷한 문제로 Q/A를 만났습니다. 'shell = True'는 나를 위해 일했습니다. 그것은 내 LD_LIBRARY_PATH, 그리고 differnt .so 연결을 시도하는 실행 파일과 관련이 있습니다. 다른 사람들에게 도움이되기를 바랍니다. –

1

django wsgi 프로세스가 실행중인 사용자와 실제로 sox를 ​​실행 해보십시오.

해당 사용자가 이진 파일을 실행할 수 없거나 8.04에서 10.04로 업그레이드 할 때 특정 이진 유형을 실행할 수 있도록 일부 커널 플래그가 손실되었을 수 있습니다.

+0

wsgi 데몬의 사이트 구성에 지정된대로 www- 데이터로 로그인합니다. 커맨드 라인에서 sox를 ​​실행하면 효과가있었습니다. 그게 네가 의심하는거야? – marue

1

Linux에서 "OSError : [Errno 8] Exec format error"가 발생하는 경우 - 커널과 실행 파일이 32 비트 대 64 비트 플랫폼인지 확인하십시오. uname -afile <executable path>이 트릭을 수행합니다. 이것은 내 솔루션이었습니다 (그리고이 페이지는 그 오류에 대한 첫 번째 히트입니다).

+0

64 비트를 exec() 할 때 32 비트 프로세스가 가능합니까? – lvella

+0

나는 그것이 틀림 없음을 확신한다. – fsckin

관련 문제