1

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

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

我知道我可以做到:

php-cli script.php > log.txt  

但是这种方法的问题是所有输出都写入了日志文件,但我看不到同时事情是如何运行的(所以如果发生任何可疑的事情我可以停止这个过程)。

只是为了抢占其他可能的问题,我无法将所有打印内容更改为日志语句,因为它们太多了,我宁愿不更改代码中的任何内容,以免我因某些事情而受到指责。另外还有时间方面的不足。我还必须在 Windows 机器上运行它。

提前致谢 :)

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

4

4 回答 4

3

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

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

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

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

于 2008-11-10T16:22:51.767 回答
1

我总是在我的网络浏览器中打开日志文件。这使我可以轻松地刷新它,并且不会中断 windows 对文件的任何写入。它不是特别优雅,但确实有效!

于 2008-11-10T16:40:28.143 回答
1

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

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

如果您愿意,也可以在 VBScript 中实现。

编辑:我刚想到我还应该提到tail命令:http://en.wikipedia.org/wiki/Tail_(Unix)。Tail 允许您读取文件的最后N行,并且还包括一个“文件监视器”模式,该模式只是不断地实时显示文件的结尾。这非常适合日志文件监控,因为它允许您实时查看日志,而不会干扰写入日志的进程。对于 Windows,tail 有多种实现,包括基于命令行和 GUI 的。Microsoft 的 Services For UNIX 包(或他们现在所称的任何东西)也包括一个版本的 tail。一些例子:

Some of these go far beyond just displaying the file in real-time as it updates and can send email alerts and colorize string matches, monitor multiple files at once, etc.

于 2008-12-05T05:39:49.023 回答
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
于 2008-11-10T16:41:12.883 回答