首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python脚本: OSError:[Errno 8] Exec格式错误

Python脚本: OSError:[Errno 8] Exec格式错误
EN

Stack Overflow用户
提问于 2014-02-04 17:03:57
回答 1查看 7.8K关注 0票数 3

当我将http://localhost:8888/cgi-bin/peoplecgi.py?action=Fetch&key=sue (sue是搁置中的一个有效密钥)发送到下面的cgi脚本时,我得到了以下内容(同时我在OSX上使用Python3.3)。有什么不对吗?

代码语言:javascript
运行
复制
127.0.0.1 - - [04/Feb/2014 10:38:41] "GET /cgi-bin/peoplecgi.py?action=Fetch&key=sue HTTP/1.1" 200 -
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/http/server.py", line 1131, in run_cgi
    os.execve(scriptfile, args, env)
OSError: [Errno 8] Exec format error: '/Users/rich/Google Drive/Code/Python/PP4E/Preview/cgi-bin/peoplecgi.py'
127.0.0.1 - - [04/Feb/2014 10:38:41] CGI script exit status 0x7f00

我正在使用O‘’Reilly的编程Python第4版。这是基于例子1-33的问题。

weberver.py:

代码语言:javascript
运行
复制
import os, sys
from http.server import HTTPServer, CGIHTTPRequestHandler

webdir = '/Users/rich/Google Drive/Code/Python/PP4E/Preview/'
port = 8888

os.chdir(webdir)
srvraddr = ("", port)
srvrobj = HTTPServer(srvraddr, CGIHTTPRequestHandler)
srvrobj.serve_forever()

peoplecgi.py

代码语言:javascript
运行
复制
import cgi, shelve, sys, os
shelvename = 'class-shelve'
fieldnames = ('name', 'age', 'job', 'pay')

form = cgi.FieldStorage()
print('Content-type: text/html')
sys.path.insert(0, os.getcwd())

replyhtml="""
<html>
<title>People Input Form</title>
<body>
<form method=POST action="peoplecgi.py">
    <table>
    <tr><th>key<td><input type=text name=key value="%(key)s">
    $ROWS$
    </table>
    <p>
    <input type=submit value="Fetch", name=action>
    <input type=submit value="Update", name=action>
</form>
</body></html>
"""

rowhtml = '<tr><th>%s<td><input type=text name=%s value="%%(%s)s">\n'
rowshtml = ''
for fieldname in fieldnames:
    rowshtml += (rowhtml % ((fieldname,) * 3))

replyhtml = replyhtml.replace('$ROWS$', rowshtml)

def htmlize(adict):
    new = adict.copy()
    for field in fieldnames:
        value = new[field]
        new[field] = cgi.escape(repr(value))
    return new

def fetchRecord(db, form):
    try:
        key = form['key'].value
        record = db[key]
        fields = record.__dict__
        fields['key'] = key
    except:
        fields = dict.fromkeys(fieldnames, '?')
        fields['key'] = 'Missing or invalid key!'
    return fields

def updateRecord(db, form):
    if not 'key' in form:
        fields = dict.fromkeys(fieldnames, '?')
        fields['key'] = 'Missing key input!'
    else:
        key = form['key'].value
        if key in db:
            record = db[key]
        else:
            from person import Person
            record = Persion(name='?', age='?')
        for field in fieldnames:
            setattr(record, field, eval(form[field].value))
        db[key] = record
        fields = record.__dict__
        fields['key'] = key
    return fields

db = shelve.open(shelvename)
action = form['action'].value if 'action' in form else None
if action == 'Fetch':
    fields = updateRecord(db, form)
else:
    fields = dict.fromkeys(fieldnames, '?')
    fields['key'] = 'Missing or invalid action!'
db.close()
print(replyhtml % htmlize(fields))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-12 20:31:52

本例中的解决方案是,我使用错误的Python版本来运行脚本。OSX10.9中的缺省值是Python2.7.5。我想用python3.3运行它,因此我的解决方案就是用适当的版本执行它:#!/usr/local/bin/python3

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21558789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档