【问题标题】:When writing Apache module, popen( svn ) fails with termination status 256编写 Apache 模块时,popen(svn) 失败,终止状态为 256
【发布时间】:2009-12-18 06:46:47
【问题描述】:

我想编写一个在线 SVN 存储库浏览器。 我决定将它实现为一个 Apache 模块,围绕命令行客户端(暂时)。 当我开始时,我有以下代码:

FILE *f;
f = popen("/usr/local/bin/svn cat http://myrepo/svn/shell.c", "r");
char buf[1025];

if (f) {
  ap_rputs("open ok\n", r);
}
else {
  ap_rputs("not open ok\n", r);
}

while (fgets(buf, 1024, f) != NULL) {
  ap_rprintf(r,"%s<br />", buf );
}

ap_rprintf(r, "return: %d\n", pclose(f));

此命令失败,终止状态为 256。这对应于什么错误?我一直找不到这个文档。

诸如“cat somefile”之类的简单调用被成功打印出来。事实上,调用“svn info path-to-a-working-copy”是成功的。但是,为了灵活性,我想处理可能的远程存储库。

你有什么建议吗?

编辑: 退出代码应在 0-255 范围内。这一个显然没有。这告诉我什么?

编辑2: 作为测试用例,我创建了一个 bash 脚本,它将运行所需的 SVN 命令,然后打印其返回值。未遇到预期的 SVN 行为,脚本打印“1”作为 SVN 的退出值。这在浏览器端可见。

【问题讨论】:

    标签: svn apache2 popen


    【解决方案1】:

    只是猜测:也许 URL 上的 svn cat 导致 svn 想要提示输入用户名/密码?

    当您创建 bash 脚本时,您是否将 stderr 重定向到 stdout 以尝试捕获任何错误消息?

    【讨论】:

    • 重定向 stderr 是个好主意。当我将它打印到标准输出时,我收到了关于身份验证的警告,就像你建议的那样。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2014-06-23
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    相关资源
    最近更新 更多