如何通过Windows CMD捕获和显示任务的输出

时间:2008-11-10 16:15:03

标签: windows command-line scripting capture

我有一个PHP脚本,我从执行各种任务的命令行(windows)运行,它提供的唯一输出是通过'print'语句直接输出到屏幕。

我想要做的是将其捕获到日志文件中。

我知道我能做到:

php-cli script.php > log.txt  

但是这种方法的问题是所有输出都被写入日志文件,但是我无法看到事情在平均时间内是如何运行的(所以如果发生任何狡猾的话,我可以停止这个过程)。 / p>

为了预先解决其他可能的问题,我无法将所有打印内容更改为日志语句,因为它们中包含的内容太多了,我宁愿不更改代码中的任何内容,以免因为某些事情而被指责FUBAR。此外,还缺乏时间方面。我还必须在Windows机器上运行它。

提前致谢:)

编辑:感谢你们的答案,最后我选择了浏览器方法,因为这是设置最简单,最快捷的方法,尽管我确信在某个地方有这个问题的实际答案。

4 个答案:

答案 0 :(得分:3)

您可以创建运行命令的powershell脚本,从命令的STDOUT读取数据,然后将输出输出到日志文件和终端供您观看。您可以使用命令Write-Output和Write-Host。

Microsoft的网站:http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/tee-object.mspx

另一个选择是使用找到一个tee程序,它将读取输入并将其转移到两个不同的输出。我相信我已经看过这些用于Windows,但我不认为它们是标准的。

维基百科:http://en.wikipedia.org/wiki/Tee_(command)

答案 1 :(得分:1)

我一直在网络浏览器中打开日志文件。这允许我轻松刷新它,并且不会中断对Windows执行的任何文件写入。它不是特别优雅,但确实有效!

答案 2 :(得分:1)

您想要Windows的“tee”命令。见http://en.wikipedia.org/wiki/Tee_(command)

Powershell包含一个tee命令,并且还有许多适用于Windows的T恤版本,例如:

如果您愿意,也可以implemented in VBScript

编辑:刚发生在我身上我还应该提一下尾部命令:http://en.wikipedia.org/wiki/Tail_(Unix)。 Tail允许您读取文件的最后 N 行,还包括“文件监视器”模式,该模式可以实时连续显示文件的结尾。这非常适合日志文件监视,因为它允许您实时查看日志,而不会干扰写入日志的进程。 Windows有一些tail实现,包括命令行和基于GUI的实现。 Microsoft的Services for UNIX软件包(或者他们现在称之为的任何软件包)也包含一个版本的tail。一些例子:

其中一些不仅仅是在更新时实时显示文件,还可以发送电子邮件警报并着色字符串匹配,一次监控多个文件等。

答案 3 :(得分:0)

慢速:

for /f "delims=" %a in ('php-cli script.php') do @echo %a&echo %a>>log.txt

或在批处理文件中:

for /f "delims=" %%a in ('php-cli script.php') do @echo %%a&echo %%a>>log.txt