我在项目设置工作流程的一部分中使用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文件。
为什么我可以捕获某些编辑器命令的输出而不是安装命令?这个特定的命令有什么不同?
答案 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输出。
答案 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