Python运行bash脚本并生成OSError

时间:2013-11-28 06:58:45

标签: python bash simplehttpserver

我有一个帮助建立本地SimpleHTTPServer的bash脚本。

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的许可与防火墙相关的东西我允许它。你能救我吗?

2 个答案:

答案 0 :(得分:2)

完全像在shell上一样运行它,即sh ./setup.sh

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

这应该可以解决问题。最有可能的是,您的setup.sh未设置为可执行文件,或者缺少标记其解释程序的第一行#!

修改

确保将shell=True设置为通过shell执行,如果您将其作为单个字符串传递,或将参数分隔到列表中,就像使用execve一样:

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

答案 1 :(得分:1)

尝试使用cwd param尝试subprocess.Popen()

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