2016-08-19 83 views
0

我有兩個php cli腳本。第一個數據管理數據到第二個。 我希望第二個提示用戶進行確認。 這可能嗎?PHP CLI - 同時管道和提示?

我使用WordPress的'php-cli-tools,但我的問題似乎適用於一般的PHP,從我看到的基本測試。 (即fgets(),readline等)

我永遠無法得到提示工作,因爲它看起來總是會從前一個輸入中讀取一個EOT字符,即使我已經讀過它...

然後,後來,當我提示使用fwrite輸出,然後使用fgets()輸入時,沒有任何反應。程序正在等待發生的事情......不知道是什麼...... 如果我使用庫,我會在輸入過程中遇到錯誤'Caught^D'。沒有運氣readline要麼...

有沒有人曾經這樣做過?

非常感謝!

+1

從'/ dev/tty'而不是'stdin'讀取用戶的響應,因爲'stdin'被重定向到管道。 – Barmar

+0

謝謝,它確實有效!如果你想寫一個稍微更詳細的答案(即不是評論),我會接受它並投票。否則,我會自己創建一個,爲了保持組織性。 –

回答

1

這個問題並不是真的特定於PHP,它適用於任何語言。在Unix上,如果您想忽略輸入重定向並直接從終端讀取,則可以從/dev/tty中讀取而不是從標準輸入讀取。

function prompt_user($prompt) { 
    $terminal = fopen("/dev/tty", "r+"); 
    if ($terminal) { 
     fputs($terminal, $prompt); 
     return fgets($terminal); 
    } 
}