[英]Execute a shell script, that reads user input, from PHP
我正在嘗試實現一種可用於調用Shell腳本或程序的PHP方法。 反引號本身就很容易,但是然后我僅在腳本/程序完成時才得到輸出,這不是我所需要的。
因此,我轉為使用popen()
,因此我將輸出打印出來。現在可以正常工作,但是我遇到了下一個我找不到有效解決方案的問題:處理來自所調用腳本的提示/程序。 我項目的本質是使我無法預先知道腳本是否需要用戶輸入,因此無法自動回答提示。 例如apt-get update ; apt-get upgrade
類的腳本apt-get update ; apt-get upgrade
apt-get update ; apt-get upgrade
可能會觸發我不知道也不想為用戶自動回答的用戶提示。
目前,我正在使用我在StackOverflow上發現的這一部分:
static public function command($cmd)
{
$cwd = getcwd();
$proc = proc_open($cmd, [['pipe','r'],['pipe','w'],['pipe','w']], $pipes, $cwd);
while(($line = fgets($pipes[1])) !== false)
{
fwrite(STDOUT,$line);
}
while(($line = fgets($pipes[2])) !== false)
{
fwrite(STDERR,$line);
}
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
return proc_close($proc);
}
對於輸出,它工作正常,但是一旦腳本提示用戶(例如, read -p "What's your poison?"
),我就沒有輸出,也不能輸入任何內容。 起初,我認為可能與STDIN管道沒有得到進一步處理有關,但我不知道如何正確設置它。
有人可以在正確的方向上指導我,以實現實現的外觀來支持用戶提示而不是自動回答它們嗎?
事實證明,有一個更簡單的解決方案:只需使用passthru()
函數,它就可以正確處理用戶提示並實時輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.