【问题标题】:In a Console App, is there a way to detect when StandardInput is available?在控制台应用程序中,有没有办法检测 StandardInput 何时可用?
【发布时间】:2010-11-14 19:50:22
【问题描述】:

我想构建一个控制台应用程序,它可能会在某些情况下停止并提示输入某些内容。但我只想在输入可用时提示。

有没有办法知道 Stdin 是否连接到任何东西?

我认为 powershell 可以做到这一点,我想做类似的事情。 Powershell 会检测它何时以交互方式运行,并在为真时进行提示。我认为也可以强制 powershell 进入非交互模式。 (如果我错了,请纠正我)

我想我认为有几种可能性,包括但不限于:

  • 程序在 cmd.exe 提示符下以交互方式运行。在这种情况下,提示输入。
  • 程序正在脚本中运行,并且某些内容已通过管道传输到标准输入。在这种情况下,没有提示。
  • 程序在脚本中运行,该脚本在 cmd.exe 提示符下运行。在这种情况下,提示。
  • 该程序正在另一个程序中运行,并且没有任何内容通过管道传输到标准输入。在这种情况下,没有提示。

控制台应用程序是否可以区分这些情况并相应地修改行为?

【问题讨论】:

    标签: .net powershell console


    【解决方案1】:

    查看 GetStdHandle API。如果应用程序没有关联的标准输入,则调用 GetStdHandle(STD_INPUT_HANDLE) 将返回 NULL。

    【讨论】:

      【解决方案2】:

      我不确定检查标准输入的可用性,但一个可能的选择是接受命令行参数(如--noprompt 或其他东西)并在非交互式环境中执行时使用它。

      【讨论】:

      • 好主意。我知道powershell v1.0 有这样一个选项。我认为是 (-i)。
      猜你喜欢
      • 2013-05-16
      • 2011-03-07
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2010-10-16
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多