Napisałem swój własny moduł, głównie do obsługi pola plików dla witryny django. Po zabawieniu się z niektórymi rzeczami związanymi z mod_wsgi (rozwiązanymi przez aktualizację do wersji 3.3), mam uruchomiony mój kod. Zaraz po wszystkich niezbędnych importu, przed określeniem żadnych klas lub funkcje, przetestować za dostępność Sox, a audiocommandlinetool niezbędny do niektórych z moich modułów funkcji:Dlaczego w tym miejscu jest uruchamiany podproces 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'),)
To działało w porządku. Teraz mam zaktualizowane ubuntu od 8.04 do 10.04 oraz kod przerywa na linii wywołaniu subprocess.Popen, rzucając się następujący komunikat o błędzie:
File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
raise child_exception
OSError: [Errno 8] Exec format error
już wyglądał praw wykonawczych SOx, nie mam innego pomysł, gdzie szukać rozwiązania tego. Czy prawa wykonywania podprocesów mogą być ograniczone? Jakieś wskazówki, co tu się może dziać?
Co się stanie, jeśli uruchomisz podproces z opcją 'shell = True' i wykonasz aplikację tak, jak zwykle w konsoli, na przykład' test = subprocess.Popen ("/ path/to/sox -h", shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE) "ten sam wynik? – Anders
Hmmm, to powoduje, że linia 'raise EnvironmentError ((1, 'Sox nie jest poprawnie zainstalowana'),)' jest wykonywana, a EnvironmentError jest podnoszony. Dzieje się tak z developserver i apache/mod_wsgi. Sox można uruchomić z wiersza poleceń bez żadnych problemów, więc nie mogę sobie wyobrazić, że zgubiłem flagę jądra, jak zasugerował samurailawngnome. I nie może to być również przywilej użytkownika, zacząłem sox jako zwykły użytkownik, su i dane www ... – marue
Instrukcja 'raise' powinna pokazać, co zostało przechwycone w' error'. Może to być prawidłowa wiadomość o błędzie sox. – Apalala