2013-11-28 1 views
0

로컬에 SimpleHTTPServer을 설정하는 데 도움이되는 bash 스크립트가 있습니다.bash 스크립트를 실행하고 OSError를 생성하는 Python

python -m SimpleHTTPServer 8080 

내 프로젝트 폴더 안에 넣었습니다. 내가 사용하여 프로그램을 실행하고 있지만 :

subprocess.call('./setup.sh') 

오류 메시지가 나옵니다 :

Traceback (most recent call last): 
    File "test.py", line 2, in <module> 
    subprocess.call('./setup.sh') 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 709, in __init__ 
    errread, errwrite) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1326, in _execute_child 
    raise child_exception 
OSError: [Errno 13] Permission denied 

나는 그것은 잘 작동 터미널

localhost:Desktop XXXX$ sh setup.sh 
Serving HTTP on 0.0.0.0 port 8080 ... 

에서 이것을 시도. 터미널이 창을 띄우고 몇 번이나 파이어 폭스에 대한 허가에 대해 묻습니다. 나 좀 도와 줄 수있어? sh ./setup.sh로 정확하게 즉, 쉘에서와 같은

+0

을 당신은 아마 전을 설정해야 'setup.sh '에서 잘랐다. – devnull

+0

루트로 실행 (sudo) – Dan

답변

2

실행을, : 트릭을 할해야

subprocess.call('sh ./setup.sh', shell=True) 

. 대부분 setup.sh이 실행 가능으로 설정되지 않았거나 해당 인터프리터를 표시하는 첫 번째 #! 행이 누락되었습니다.

편집 :

:

하는 단일 문자열로 전달하거나 execve와 당신이 수도로, 목록에 매개 변수를 구분하는 경우, 쉘을 통해 그것을 실행 shell=True를 설정해야합니다

subprocess.call(['sh', './setup.sh']) 
+0

시도했지만 OSError : [Errno 2] 해당 파일이나 디렉토리가 없음 – fyr0049

+0

이 경우'shell = True'를 설정하십시오. 이 명령은 파이썬이 쉘을 통해 명령을 실행하도록 요청합니다 (기본적으로'os.system()'과 같습니다). 또는 명시 적으로 'sh'와 매개 변수를 목록에서 분리하십시오. – creichen

+0

예, 이제 제대로 작동합니다. 그러나, 나는 파이썬이 계속 실행되고 있다는 것을 알아 차렸다. 이것이 실행되는 동안 계속 진행할 수 없다는 뜻입니까? – fyr0049

1

CWD의 PARAM로, 시도 subprocess.Popen() 보내기

subprocess.Popen(['sh', './setup.sh'], cwd='/dir/contains/setup.sh/')