mod_python 使用 open() 时无法检测到文件

0 投票
1 回答
1032 浏览
提问于 2025-04-15 19:17

我正在尝试打开一个位于我的 /var/www/ 目录下的文件,名字叫 cardlist.xml。以下是我使用的代码。

import cgi
import os
open("./cardlist.xml", "r")
def crawlXml():
    return 0

我遇到的错误是:

MOD_PYTHON 错误

进程ID: 11361 解释器:
'127.0.1.1'

服务器名称: '127.0.1.1' 文档根目录: '/var/www'

请求的URI: '/test.py/crawlXml' 位置: 无 目录:
'/var/www/' 文件名:
'/var/www/test.py' 路径信息:
'/crawlXml'

阶段: 'PythonHandler' 处理程序: 'mod_python.publisher'

追踪信息(最近的调用在最前面):

文件 "/usr/lib/python2.6/dist-packages/mod_python/importer.py", 第1537行,在 HandlerDispatch default=default_handler, arg=req, silent=hlist.silent)

文件 "/usr/lib/python2.6/dist-packages/mod_python/importer.py", 第1229行,在 _process_target result = _execute_target(config, req, object, arg)

文件 "/usr/lib/python2.6/dist-packages/mod_python/importer.py", 第1128行,在 _execute_target result = object(arg)

文件 "/usr/lib/python2.6/dist-packages/mod_python/publisher.py", 第204行,在 handler module = page_cache[req]

文件 "/usr/lib/python2.6/dist-packages/mod_python/importer.py", 第1059行,在 getitem return import_module(req.filename)

文件 "/usr/lib/python2.6/dist-packages/mod_python/importer.py", 第296行,在 import_module log, import_path)

文件 "/usr/lib/python2.6/dist-packages/mod_python/importer.py", 第680行,在 import_module execfile(file, module.dict)

文件 "/var/www/test.py", 第4行,在 open("./cardlist.xml", "r")

IOError: [Errno 2] 没有这样的文件或目录: './cardlist.xml'

模块缓存详情

访问时间: 2010年2月14日 16:59:58 生成次数: 19

_mp_27cc55c5447f9e0aa13691719290c225 { 文件名: '/var/www/test.py'
实例: 85 [重新加载]
生成次数: 19 [错误] 修改时间:
2010年2月14日 16:40:17 导入时间:
2010年2月14日 16:22:38 }

这是在

/var/www/ 目录下执行 ls -la 的结果 drwxr-xr-x 3 root root 4096 2010-02-14 16:40 . drwxr-xr-x 16 root root 4096 2010-02-14 15:05 .. -rwxr-xr-x 1 root root 4612891 2010-01-30 16:39 cardlist.xml drwxrwx--- 3 root root 4096 2010-02-14 14:31 mtg -rw-r--r-- 1 root root 110 2010-02-14 16:40 test.py -rw-r--r-- 1 root root 111 2010-02-14 16:32 test.py~

有没有人知道出了什么问题?

1 个回答

3

工作目录可能并不是文件所在的目录。你可以试着使用绝对路径,或者明确的相对路径:

import os.path
open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'cardlist.xml'))

撰写回答