使用输入运行可执行文件并将输出重定向到txt文件

问题描述 投票:0回答:1

我试图将.exe文件的结果重定向到.txt文件中,但是我在Windows cmd中使用的命令

test.ext < input.txt > output.txt

未正确显示输入文件输入的内容:

Enter top, an integer between 3 and 29 (including): Enter side, an integer between 2 and 20 (including): Enter 0 for left-tilt or 1 for right-tilt of the side: 
             ###
            #@#
           #@#
          ###

The number of characters on the perimeter:     10.
The number of characters in the interior:      2.
The number of characters of the parallelogram: 12.

在我的预期中,输出应该是这样的:

Enter top, an integer between 3 and 29 (including): 3
Enter side, an integer between 2 and 20 (including): 2
Enter 0 for left-tilt or 1 for right-tilt of the side: 0

             ###
            #@#
           #@#
          ###

The number of characters on the perimeter:     10.
The number of characters in the interior:      2.
The number of characters of the parallelogram: 12.

就像我运行 .exe 文件时所显示的那样。

有什么简单的方法来实现我想要的吗?

windows cmd command-line command
1个回答
0
投票

tl;博士

  • 行为归结为给定的可执行文件选择如何处理(默认情况下)交互提示,当他们的响应是通过标准输入提供时而不是通过用户交互输入的内容

  • 结果是获得不同行为的唯一方法是修改可执行文件


有两个方面发挥作用:

  • 交互式提示的消息是否写入stdout直接写入终端,以及如果标准输入重定向,即是否从标准输入读取响应,是否完全打印消息

  • 提示的

    response 是否写入 stdout直接写入终端根本不写入(如果已通过 stdin 提供响应)。

理想情况下,您希望给定的可执行文件选择以下组合之一如果标准输入被重定向,基于以下设计选择:

    (a) 如果(默认情况下)交互式提示被视为纯粹的交互式功能,与应用程序的(标准输出)
  • 输出

    既不打印
      提示消息,也不打印从标准输入读取的值。
    (b) 如果应用程序想要生成更像交互式会话的
  • 脚本
  • 的输出,同时显示提示消息和响应:

    打印

    both
      提示消息和 stdin 中的值到
    • stdout
  • 不幸的是,
您的可执行文件没有使用这两种方法
,而是做出以下选择组合:

它将提示消息写入标准输出,同时
  • 打印(标准输入提供的)响应

    由于提示消息本身没有尾随换行符 - 鉴于应在同一行上
  • 输入响应 - 也没有打印响应(
  • 确实

    涉及尾随换行符(换行符))意味着所有(连续的)提示消息出现在同一行。

  • 批处理文件

,例如表现出此行为,您可以使用以下示例批处理文件进行验证: @echo off set /P V1="Prompt 1: " set /P V2="Prompt 2: " set /P V3="Prompt 3: " echo Values provided: [%V1%] [%V2%] [%V3%] 作为

sample.cmd < input.txt > output.txt
 调用,在 
input.txt

中包含 3 行输入,其中包含

a
b
c
,您将在
output.txt
中看到以下输出:
Prompt 1: Prompt 2: Prompt 3: Values provided: [a] [b] [c]
即提示信息无换行连接,缺少响应。

PowerShell 的
行为

是特定于平台的: 重要:以下内容仅适用于从

外部

通过其CLI调用PowerShell代码(powershell.exe适用于Windows PowerShell,

pwsh
适用于PowerShell(Core)7+)),因为只有这样 Read-Host
 才会从 
重定向的 stdin
读取响应。因此,在类似 Unix 的平台上,它也适用于通过 shebang 行在 PowerShell 中实现的直接可执行 shell 脚本。
类 Unix 的平台

上,您将通过常规 中包含 3 行输入,其中包含

a

b
c
,您会在 
output.txt
 中看到以下输出:
Prompt 1: a
Prompt 2: b
Prompt 3: c
Values provided: [a] [b] [c]
也就是说,这个金额的行为 (b):提示消息和标准输入提供的响应都被打印到标准输出并因此被捕获。

© www.soinside.com 2019 - 2024. All rights reserved.