os.walk 从控制台工作但不是从 cgi-bin

os.walk works from console but not from cgi-bin

当我 运行 来自我的 PyScripter IDE 的这个 os.walk 代码时,它工作得很好。 os.walk 能够遍历远程 unix 路径并打印目录和文件名。

然而,当我从我的 Apache 服务器的 cgi-bin 运行 相同的脚本时,我没有得到 os.walk(路径、目录、文件)输出。我也没有在 Apache error.log 文件中记录任何错误消息。

注意:Python 和我的 cgi-bin 在同一台 Windows 机器上,remote_path 在 Unix 上。

为什么同样的代码在控制台中有效,但在 cgi-bin 中却无效,我该怎么做才能解决这个问题?

#!C:\Python27\python.exe -u

import os

print "Content-type: text/html\n\n";
print "<html><head>"
print "<font size=+2><B>os.walk test</B></font><br><br>";

# Remote path
remote_path = r'\unix_server\path15\q1\files\na\canada'

i = 0
for (path, dirs, files) in os.walk(remote_path):
    print "Path", path
    print "<BR><BR>Dirs", dirs
    print "<BR><BR>Files", files
    i += 1
    if i >= 1:
        break

感谢kindall,我发现问题确实是Apache没有适当的权限。

为了解决这个问题,我做了以下 (Windows 7 OS):

  1. 已打开 services.msc。开始 -> 运行 -> "services.msc"
  2. 在列表 "Apache2" 中找到了我的 Apache 服务。双击它。
  3. 在 Apache2 服务的属性对话框中,切换到 "Log On" 选项卡。 "Local System account" 的单选按钮已选中。我将其切换为 "This account" 并单击浏览。
  4. 在 "Enter object name to select" 文本框中,我输入了我的网络名称 + 反斜杠 + 我的用户名。例如 NETWORK\username。单击“确定”。
  5. 然后在“登录”选项卡上,我看到填充了我的完整网络电子邮件地址。我输入了我的密码和密码确认并点击了应用。
  6. 最后的步骤是停止 Apache2 服务,然后重新启动该服务。一旦完成,问题就解决了,我的脚本开始从 cgi-bin 运行。 :)