2013-11-28 182 views
0

我有一個bash腳本,它可以幫助建立本地的SimpleHTTPServerPython運行bash腳本並生成OSError

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 ... 

重試此這是工作的罰款。 我記得有幾次終端彈出一個窗口,問我有關與防火牆相關的東西的python權限,我允許它。你可以幫我嗎?完全按照自己的外殼,即

+0

你可能需要設置前'setup.sh'上的可變位。 – devnull

+0

以root身份運行它(sudo) – Dan

回答

2

運行它,爲sh ./setup.sh

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

這應該做的伎倆。很可能,您的setup.sh未設置爲可執行文件,或者缺少標記其解釋器的第一行#!

編輯:

確保設置shell=True通過shell執行它,如果你把它作爲一個字符串,或者參數分隔成列表,你可能會execve

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

我試過了,但是它說OSError:[Errno 2]沒有這樣的文件或目錄 – fyr0049

+0

在這種情況下設置'shell = True'。這將要求Python通過你的shell來執行命令(然後,它與'os.system()'基本相同),或者將'sh'和列表中的參數明確分開。 – creichen

+0

是的,現在它工作正常。但是,我注意到python只是繼續運行。這是否意味着在這個執行過程中我不能繼續前進? – fyr0049

1

subprocess.Popen()一試,與CWD PARAM:

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