2013-05-01 62 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