Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在dart脚本中从键盘重定向stdin?_Dart - Fatal编程技术网

如何在dart脚本中从键盘重定向stdin?

如何在dart脚本中从键盘重定向stdin?,dart,Dart,在测试我编写的Dart-pre-commit git钩子脚本时,我能够在使用提示符时输入stdin作为输入。但是在提交时通过git运行它时,它会在不提示用户输入的情况下运行输入调用。显然,在某些语言中有一种解决方法,通过调用exec 文件(Platform.isWindows?r'conIN$:'/dev/tty') .openRead() .变换(utf8.解码器) .transform(常量LineSplitter()) .首先; 我找到了conIN$的以下文档,它表明这始终指向Windo

在测试我编写的Dart-pre-commit git钩子脚本时,我能够在使用提示符时输入stdin作为输入。但是在提交时通过git运行它时,它会在不提示用户输入的情况下运行输入调用。显然,在某些语言中有一种解决方法,通过调用
exec
为键盘分配标准输入,但是在Dart中呢?

您可以直接将/dev/tty作为文件读取,而不是重定向stdin:

import 'dart:convert';
import 'dart:io';

void main() async {
  print('What is your name: ');

  final name = await getUserInput();

  print('Hello! Your name is $name');
}

Future<String> getUserInput() async =>
    File(Platform.isWindows ? r'conIN$' : '/dev/tty')
        .openRead()
        .transform(utf8.decoder)
        .transform(const LineSplitter())
        .first;
导入'dart:convert';
导入“dart:io”;
void main()异步{
打印(‘你叫什么名字?’);
最终名称=等待getUserInput();
打印('您好!您的名字是$name');
}
Future getUserInput()异步=>
文件(Platform.isWindows?r'conIN$:'/dev/tty')
.openRead()
.变换(utf8.解码器)
.transform(常量LineSplitter())
.首先;
我找到了conIN$的以下文档,它表明这始终指向Windows上的控制台输入:

好的,谢谢。windows呢?有没有办法防止它在一行之后退出?它验证输入,因此用户必须在第一次尝试时就正确地进行操作。我对程序退出的评论更多地是关于/dev/tty文件在收到用户的一行代码后自动关闭的提示,因此我的示例将关闭,因为我的程序不使用任何输入。我已经更新了示例,使其更容易理解这一方面。关于Windows,我不知道,因为我根据您自己的建议解决方案(exec