繁体   English   中英

Python运行bash脚本并生成OSError

[英]Python running bash script and generate OSError

我有一个bash脚本,可以帮助建立本地SimpleHTTPServer

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权限,我允许了。 你能帮助我吗?

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

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

这应该够了吧。 很可能您的setup.sh未设置为可执行文件,或者缺少第一个#! 标记其解释器的行。

编辑:

确保将shell=True设置为通过外壳执行它(如果将其作为单个字符串传递),或者将参数分成列表(如execve

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

使用cwd参数尝试一下subprocess.Popen()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM