2013-11-28 138 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/')