我正在创建一个脚本,通过以下方式接受数据输入:
在这两种情况下,我都需要从键盘,stdin获取控件;
1。使用pipe(stdin)打开文件不时,我可以从
中读取键盘./myscript.php --file filename.txt
然后
<?php
$DATA = file_get_contents("filename.txt");
// etc loop
$input = fopen("php://stdin", "r"); // works
stream_set_blocking($input, false);
$key = fgetc($input); // get input from keyboard
echo $key;
?>
2。但是当使用管道时,这不起作用,例如:
cat filename.txt | ./myscript.php
然后
<?php
$DATA = file_get_contents("php://stdin");
// etc loop
$input = fopen("php://stdin", "r"); // does not works
stream_set_blocking($input, false);
$key = fgetc($input); // get input from keyboard
echo $key;
?>
为什么我不能在第二种情况下从键盘读取?感谢。
答案 0 :(得分:0)
我能够直接从/dev/tty
<?php
$DATA = file_get_contents("php://stdin");
// etc loop
$input = fopen("/dev/tty", "r"); // this works, as stdin == pipe
stream_set_blocking($input, false);
$key = fgetc($input); // get input from keyboard
echo $key;
?>
我在这里找到了答案:
How to make Perl use different handles for pipe input and keyboard input?
此外:
Can I prompt for user input after reading piped input on STDIN in Perl?