为什么有些Windows命令在作为CGI脚本运行时会生成输出,而其他命令则不会';T

为什么有些Windows命令在作为CGI脚本运行时会生成输出,而其他命令则不会';T,windows,batch-file,cmd,output,cgi,Windows,Batch File,Cmd,Output,Cgi,我正在用Apache2.4.23在Windows7上开发一个web应用程序。我有一个非常简单的CGI脚本,它是作为Windowscmdbatch文件实现的。对于从批处理文件调用的某些命令,如type,输出将被提供给客户端。对于其他人来说,例如排序,它在涅盘中消失了 下面是我的CGI脚本的示例代码: @echo关闭 回显内容类型:文本/普通 回声。 回声——开始--- 键入some.txt 回声----结束---- 它在浏览器中很好地显示了some.txt的内容,周围是Start和End标记。但

我正在用Apache2.4.23在Windows7上开发一个web应用程序。我有一个非常简单的CGI脚本,它是作为Windows
cmd
batch文件实现的。对于从批处理文件调用的某些命令,如
type
,输出将被提供给客户端。对于其他人来说,例如排序,它在涅盘中消失了

下面是我的CGI脚本的示例代码:

@echo关闭
回显内容类型:文本/普通
回声。
回声——开始---
键入some.txt
回声----结束----
它在浏览器中很好地显示了
some.txt
的内容,周围是
Start
End
标记。但是,只需将
类型
替换为
排序
就不会产生任何输出。与预期一样,
Start
End
标记仍会显示,但它们之间没有显示任何内容。奇怪的是,当从服务器上的命令行调用时,
type
sort
都能很好地工作(即在控制台上显示它们的输出)

这里可能发生了什么


完整性:当我从Perl CGI脚本调用命令时,它们都可以正常工作。

echo
type
cmd.exe
的内部命令,但是
sort
是一个控制台应用程序。控制台应用程序是位于
%SystemRoot%\System32
中的
sort.exe
。我假设通过Apache运行批处理文件时未找到
sort.exe
,或者找到并执行了不同的
sort.*
。这取决于通过Apache运行批处理文件时定义的环境变量
PATH
PATHEXT
。我建议在批处理文件
%SystemRoot%\System32\sort.exe
中指定,并检查您现在是否获得了预期的输出。您可以添加
设置路径
或仅添加
设置
以获得环境变量的输出。@Mofi:谢谢您的建议,但是指定完整路径也没有帮助。在真正的应用程序中,我实际上运行了一个不同的
exe
,我用完整路径指定了它。如果我不这样做,我会得到一条错误消息,而不是一个空输出。也许您的实际应用程序不会输出到处理STDOUT,但例如到STDERR。并且,到STDERR的输出不是由Apache捕获的。使用Microsoft在文章中解释的“指向\real app\app.exe”2>&1的路径运行真正的应用程序,以使写入STDERR的文本重定向到STDOUT。应用程序也可以设计为将数据写入控制台,完全绕过重定向。@Mofi&Harry Johnston:No,它将输出输出到
stdout
,将错误输出到
stderr
,就像它应该输出的一样。即使没有,它也不会解释排序(mis)行为,或者从Perl调用时的正确行为。