Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在另一个命令中调用Symfony控制台命令并抑制输出_Php_Symfony_Console Application - Fatal编程技术网

Php 在另一个命令中调用Symfony控制台命令并抑制输出

Php 在另一个命令中调用Symfony控制台命令并抑制输出,php,symfony,console-application,Php,Symfony,Console Application,我有一个使用Symfony控制台组件的简单控制台应用程序 我有两个命令(比如,cmdOne和cmdTwo),可以很容易地独立调用 $ myApp.php cmdOne $ myApp.php cmdTwo 这两个命令都有大量的输出,我可以通过发出-q选项轻松地将其静音 现在,我希望cmdOne调用cmdTwo,但是我希望cmdTwo保持安静。我不想做任何疯狂的事情,但我正在努力去做任何事情,尽管我阅读了所有的文档 以下是我到目前为止的示例代码(此代码段将包含在cmdOne->execute()

我有一个使用Symfony控制台组件的简单控制台应用程序

我有两个命令(比如,
cmdOne
cmdTwo
),可以很容易地独立调用

$ myApp.php cmdOne
$ myApp.php cmdTwo
这两个命令都有大量的输出,我可以通过发出
-q
选项轻松地将其静音

现在,我希望
cmdOne
调用
cmdTwo
,但是我希望
cmdTwo
保持安静。我不想做任何疯狂的事情,但我正在努力去做任何事情,尽管我阅读了所有的文档

以下是我到目前为止的示例代码(此代码段将包含在
cmdOne->execute()
中):

这运行得很好,就像代码命令执行时一样,但是控制台上有输出(由
cmdTwo
生成),我不想显示


指定
-q
选项是不可能的,因为它是“保留的”(即不是由开发人员创建的),还是我遗漏了一些明显的东西?

而不是传递相同的
$output
实例(输出到当前控制台的实例)创建
NullOutput

$returnCode = $command->run($input, new \Symfony\Component\Console\Output\NullOutput);

它基本上是一个黑洞——它接受输出并无声地将其丢弃。

@cerebriform:由于phpstorm启动时间缓慢,并重新为项目编制索引(以找出确切的类名),它花费的时间比可能的时间多了2分钟-宝贝!这是一种享受,谢谢你(和其他人);现在有一个曲线球:如果
cmdTwo
失败,是否有一个合理的方法捕获输出?目前,如果直接运行,它只是将错误直接发送到控制台-我是否应该为某些错误返回特定的退出代码,然后在
cmdOne
中处理它们?或者这完全是另一个问题……但是,但是,我在一个屏幕油腻的平板电脑上,这就是不合作。:)@这要看情况了。这个命令要单独使用吗?您可以扩展一个
Output
抽象类,并将整个输出捕获为一个字符串。@zerkms我将把
cmdOne
cmdTwo
重命名为
install
migrate
。我希望
install
在其过程中执行
migrate
,但如果
migrate
失败,我希望
install
在控制台上出错<代码>迁移也需要能够自己运行。更清楚?还是像泥一样清澈?
$returnCode = $command->run($input, new \Symfony\Component\Console\Output\NullOutput);