将Composer安装的输出重定向到文本文件

时间:2016-10-15 13:49:07

标签: windows cmd composer-php

我在项目设置工作流程的一部分中使用composer。设置的每个部分都会将其结果和任何其他相关信息记录到文件中。我无法捕获composer install的输出。当我直接从命令行运行composer install时,软件包已正确安装,我在命令窗口中看到输出。当我从cmd文件运行它时,软件包已安装,但输出未保存到文件,但是,其他编写器命令(-V,help等)确实将其输出保存到文件中。

我知道帮助和-V命令不需要cd,但我将其留在test1和test2 cmd文件中以排除与该问题有关的任何内容。

以下是一些.cmd文件的内容和结果。

test1.cmd

@ECHO OFF
cd "C:\path\to\project"
composer -V > test1.txt

test1.txt内容

Composer version 1.2.1 2016-09-12 11:27:19

test2.cmd

@ECHO OFF
cd "C:\path\to\project"
composer help > test2.txt

test2.txt内容

Usage:
  help [options] [--] [<command_name>]

Arguments:
  command                        The command to execute
  command_name                   The command name [default: "help"]

Options:
      --xml                      To output help as XML

...truncated

test3.cmd

@ECHO OFF
cd "C:\path\to\project"
composer install > test3.txt

test3.txt已创建但是为空0 kb文件。

为什么我可以捕获某些编辑器命令的输出而不是安装命令?这个特定的命令有什么不同?

4 个答案:

答案 0 :(得分:2)

在bash:composer install --no-ansi &>log

答案 1 :(得分:1)

由于该问题似乎是基于Windows并通过批处理脚本运行composer的,所以:

composer批处理脚本将退出正在调用的父批处理脚本,因此您需要使用批处理脚本中的%comspec% /c composer来调用composer以避免这种情况。

要在Windows上删除ansi输出并将输出重定向到日志文件,请运行:

%comspec% /c composer --no-ansi --no-interaction install >>composer.log 2>&1

您还可以找到本地的composer.bat并将php "%~dp0composer.phar" %*行编辑为php "%~dp0composer.phar" %* --no-ansi

取决于所调用的脚本,如果脚本不遵循传递给作曲家的--no-ansi选项,则仍然可能会有ansi输出。例如,在Laravel中,即使在运行composer --no-ansi install时调用php artisan package:discover --ansi,它仍然会生成优化的自动加载脚本并向控制台回显ansi输出。

参考https://stackoverflow.com/a/41599767/1925358

参考https://getcomposer.org/doc/03-cli.md

答案 2 :(得分:1)

在我的情况下,Composer的输出正在写入STDERR而不是STDOUT,因此直接管道传输到这样的文件将导致没有输出:

composer update --no-scripts >> out.txt

通过添加2>&1将STDERR流重定向到文件中,我能够将所需的输出获取到文件中。

composer update --no-scripts >> out.txt 2>&1

答案 3 :(得分:0)

composer install -o > test1.txt