读取CLI Dart应用程序的“隐藏”输入

问题描述 投票:2回答:2

从命令行Dart应用程序接收“隐藏”输入的最佳方法是什么?例如,在Bash中,这可以通过以下方式完成:

read -s SOME_VAR
input dart command-line-interface
2个回答
1
投票

io.stdin.echoMode设置为false:

import 'dart:io' as io;

void main() {
  io.stdin.echoMode = false;

  String input = io.stdin.readLineSync();

  // or 

  var input;
  while(input != 32) {
    input = io.stdin.readByteSync();
    if(input != 10)  print(input);
  }

  // restore echoMode
  io.stdin.echoMode = true;
}

0
投票

这是一个稍微扩展的版本,主要区别在于,如果在执行代码时引发异常,它使用finally块来确保将模式重置。该代码还使用了waitFor调用(仅在dart cli应用程序中可用)将此代码转换为同步调用。鉴于这是一个cli命令,因此不需要期货带来的复杂性。

您键入时,代码还会执行'*'的经典输出。

如果您正在做很多cli工作,则下面的代码来自我正在使用的dshell软件包dshell。看看“询问”方法。

https://pub.dev/packages/dshell

  String readHidden() {
    var line = <int>[];

    try {
      stdin.echoMode = false;
      stdin.lineMode = false;
      int char;
      do {
        char = stdin.readByteSync();
        if (char != 10) {
          stdout.write('*');
          // we must wait for flush as only one flush can be outstanding at a time.
          waitFor<void>(stdout.flush());
          line.add(char);
        }
      } while (char != 10);
    } finally {
      stdin.echoMode = true;
      stdin.lineMode = true;
    }

    // output a newline as we have suppressed it.
    print('');
    return Encoding.getByName('utf-8').decode(line);
  }
© www.soinside.com 2019 - 2024. All rights reserved.