0

そのため、コンソールのテキストの色を変更するこのスクリプトがあります。問題は、STDIN と引数の両方から文字列を受け入れ-sますが、結果に STDIN が含まれない場合があることです。スクリプトをそれ自体にパイプするときにのみこれに気づきました(以下を参照)

php color.php -s Hello, -c green -S underline | php color.php -s " Bob" -c red -S bold

上記の bash スクリプトは、常に " Bob" を表示しますが、スクリプトのどの部分も変更せずに、一連の試行で数回だけ "Hello" を表示します。私が知る限り、含まれるか含まれないかは非常にランダムで、目立ったパターンはありません。

だから私の質問は、どうすればこれを防ぐことができますか?

4

1 に答える 1

1

ノンブロッキングの読み取りでは、まだデータが存在しない可能性があります。別のオプションは、入力が対話型端末でない場合にのみ STDIN を読み取ることです。

<?php
$args = getopt('s:');
if(!posix_isatty(STDIN)){
        $stdin = file_get_contents('php://stdin');
} else {
        $stdin ='';
}
echo $stdin.' '.$args['s'];
于 2013-05-01T18:52:33.253 に答える