我从我的home目录下面的命令:
python -m CGIHTTPServer
这将运行服务器,但是当我尝试在cgi-bin目录,我得到访问的脚本:
Traceback (most recent call last):
File "/usr/lib/python2.7/CGIHTTPServer.py", line 251, in run_cgi
os.execve(scriptfile, args, env)
OSError: [Errno 13] Permission denied
以root身份运行不有所作为。 该文件似乎拥有所有正确的权限:
student@bandersnatch:~$ ls -lhR
.:
total 12K
drwxr-xr-x 2 student student 4.0K Jun 13 18:38 cgi-bin
drwxr--r-- 2 student student 4.0K Jun 10 2004 kalpy
-rwxrwxrwx 1 student student 2.0K Jun 13 12:37 test.html
./cgi-bin:
total 8.0K
-rwxr-xr-x 1 student student 31 Jun 13 18:38 test.py
编辑:test.py的内容是:
#!/usr/bin/python
print "test"
该家当是有效的:
~$ which python
/usr/bin/python
你,不管怎样,在运行过程中的根?
如果您使用的源代码 ,你会看到在CGIHTTPServer.py
,只是之前调用execve
:
try:
os.setuid(nobody)
except os.error:
pass
也就是说,它会运行CGI脚本,没人,如果是能够改变的UID,即如果它是根。 如果不是根,这个电话很可能会失败,而过。
所以我的猜测是,你正在运行的服务器的根,所以脚本运行的人 ,但这个用户没有访问脚本。 这是意料之中的,因为你说这是你的家目录。
有两种解决方案,我能想到的:
- 建议:不要运行服务器的根!
- 解决方法:将脚本复制到一个目录, 没有人可以读取(
/tmp
为例)。
就个人而言,除非有一些原因,我不知道,我推荐使用的,而不是os.execve subprocess.Popen。 我以前也碰到errno的13,试图开始POPEN([“开放execName.app”])一个的.app。 我不得不使用POPEN([ 'execName.app/Contents/MacOS/execName', 'ARG1', 'ARG2' ...])来代替。 不知道有没有什么帮助,但给它一个镜头。
我跑进从Ubuntu Linux操作系统同样的问题。 其次是“迈克”的解决方案,修改。 而不是做其中有几个文件夹放在“/ usr”的文件模式,改变含有被拒绝的可执行文件的文件夹的权限。 (您可以检查加载在同一位置静态HTML文件时,该服务器将运行良好,并显示错误脚本运行时才)。
cd /pathto/folder/with/deniedscript
sudo chmod -R 755 ./
现在脚本拥有权限,所以应该运行正常。 需要注意的是-R赋予权限的所有文件此文件夹中(和子文件夹如果有的话)。
在Windows下运行的文件向右跑出命令提示。
对于Linux和Windows的用户,这不是如此!
我得到以下错误:
回溯(最近通话最后一个):文件 “/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/http/server.py”,线1158,在run_cgi os.execve(脚本文件,指定参数时,ENV )PermissionError:[错误13]权限被拒绝:
你需要下面来解决这些问题:
对于Linux用户:
1)确保认领被调整为Python 3 Linux和Mac OSX系统上运行的:
#!/usr/bin/env python3
2)由于原来的可执行文件写在窗口,他们会在必须删除的文件隐藏的“\ R”。 这里有三种可能的方式:a)在终端的命令行类型: tr -d '\r' < input file name > output file name
(只是重命名输出文件的新名称- >擦除旧的文件- >然后重新改变输出文件名返回到原来的)b)中在终端的命令行类型: cat inputfile | col -b > outputfile
cat inputfile | col -b > outputfile
(只是重命名输出文件的新名称- >擦除旧的文件- >然后重新改变输出文件名返回到原始)c)中下载DOS2UNIX的,然后输入终端的命令行:DOS2UNIX的输入的文件名
3)制作文件可执行:在终端的命令行类型:1)文件模式755的文件名,或者b)使用chmod + X的文件名或文件模式A + X的文件名
对于Mac OSX用户,它几乎是相同的:
- 从Linux的重复步骤1)
- 从Linux的重复步骤2)
第3步事情的变化:
基于apache.org wiki页面: https://wiki.apache.org/httpd/13PermissionDenied它说,你必须让从文件位置遍历所有客场直到/用户根目录下的每个可执行。
你必须做到以下几点。
3)在终端的命令行:
a) type command: `cd /Users`
b) type command: `sudo chmod -R 755`
现在,你可以通过运行服务器.py文件:
sudo webserver.py
并通过正常输入文件:
python3 inputfile.py
现在,你应该是所有好去,没有更多的权限错误! 您可以进行必要的调整,以家当和命令行运行是否蟒2。