2013-05-01 57 views
0

因此I have this script会改变控制台中文本的颜色。问题是虽然它接受来自STDIN和-s参数的字符串,但它偶尔会在结果中省略STDIN。我只注意到这一点时,我管脚本本身(见下文)STDIN只能随机工作[PHP CLI]

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

上面的bash脚本会始终显示“鲍勃”,但只会显示“你好”,在一系列的尝试了几次, 没有更改脚本的任何部分。据我所知,它是否包括它是非常随机的,没有明显的模式。

所以我的问题是,我该如何防止这种情况?

+0

嗯,而不是读取STDIN无阻塞(数据可能还没到达那里),你可以possily读它阻塞,输入不一个tty:'if(!posix_isatty(STDIN)){$ input = file_get_contents('php:// stdin');}' – Wrikken 2013-05-01 18:39:43

+0

嗯,我并不期待快速得到答案。完美的工作,谢谢! – 2013-05-01 18:47:03

+0

Aight,我会将其升级为答案。 – Wrikken 2013-05-01 18:51:32

回答

1

读取非阻塞可能没有数据。另一种选择是只读取STDIN如果输入不是一个交互终端:

<?php 
$args = getopt('s:'); 
if(!posix_isatty(STDIN)){ 
     $stdin = file_get_contents('php://stdin'); 
} else { 
     $stdin =''; 
} 
echo $stdin.' '.$args['s']; 
+0

再次感谢,这是在上下文中应用的答案:[点击我](https://github.com/ProjectCleverWeb/CLI-stuff/commit/ad4e896226113ee4ebe80aa5776336a98380ddad) – 2013-05-01 19:00:25