代码之家  ›  专栏  ›  技术社区  ›  Cheeso

在控制台应用程序中,有没有一种方法可以检测标准输入何时可用?

  •  3
  • Cheeso  · 技术社区  · 15 年前

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

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

    我认为PowerShell可以做到这一点,我想做一些类似的事情。PowerShell检测交互运行的时间,如果是这样,则提示。我认为也可以强制PowerShell进入非交互模式。(如果我错了,请纠正我)

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

    • 程序在cmd.exe提示下以交互方式运行。在这种情况下,提示输入。
    • 程序在一个脚本中运行,一些haas被传输到stdin。在这种情况下,没有提示。
    • 该程序正在一个脚本中运行,该脚本在cmd.exe提示下运行。在这种情况下,提示。
    • 该程序正在另一个程序中运行,没有任何内容被传输到stdin。在这种情况下,没有提示。

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   ScottTx    15 年前

    查看getstddhandle API。打电话 GetStdHandle(STD_INPUT_HANDLE) 如果应用程序没有关联的stdin,则返回空。

        2
  •  1
  •   statenjason    15 年前

    我不确定是否要检查stdin的可用性,但是一个可能的选项是接受命令行参数(比如 --noprompt 或者其他东西)并在非交互环境中执行时使用它。