在batchfi中自动响应命令行程序

2024-05-04 18:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试运行一个Windows(XP)命令行程序,该程序提示输入“Enter”或“y”以继续。目前,我可以通过运行以下程序来响应“y”: echo y | name_of_binary 在批处理文件中。

我不知道如何告诉shell在需要时用“Enter”或“y”响应。如果它得到一个“按回车键继续”的提示(其中没有太多,但足以引起问题)和回音“y”,它会陷入一个奇怪的循环,不会接受任何输入(它会发出数千个“按回车键继续”的声音)。如果我可以先按回车键,然后按“y”键,那可能行得通,但我尝试的所有按回车键的方法都行不通。

我最终通过Python中的os.system()调用这个批处理文件。如果有办法让Python运行二进制文件(通过os.system(name_of_binary)?)并对提示做出回应,这将是理想的选择。我已经尝试过os.system(echo y | name_of_binary),它的行为与批处理文件相同(应该如此)。我应该使用不同的方法,还是可以通过修改当前使用的“echo…”命令来解决这个问题?


Tags: 文件of方法命令行nameecho程序os
1条回答
网友
1楼 · 发布于 2024-05-04 18:21:21

签出Expect for Windows

这就是你所需要的。有几本关于Expect的书,还有许多教程(包括示例)。你最喜欢的搜索引擎是你最好的朋友,但是上面给出的Activestate网站URL,有你需要的一切。虽然您在教程和书籍中可能会找到以Unix为中心的内容,这就是expect的起源,但是Windows expect并没有太大的不同。

Expect将允许您自动化批处理脚本中的命令行交互。

网友
2楼 · 发布于 2024-05-04 18:21:21

批量输出Enter的标准方法是echo/在没有额外空格的行中。若要输出后跟“Y”的回车,可以尝试以下操作:(echo/&echo Y) | name_of_binary(不要在echo/&中插入空格)。

如果这不起作用,那是因为在第一个回车之后和Y之后插入的换行符。由(echo/&echo Y生成的字节的确切序列是:CrLfYCrLf,其中Cr是回车,Lf是换行符。

如果前面的方法有问题,您可以用这个批处理文件创建一个只有CrY字节的文件:

@echo off
echo/> EnterY.txt
(
echo e101
echo 59
echo w
echo q
) | debug EnterY.txt > nul

然后按如下方式执行命令:name_of_binary < EnterY.txt

请注意,echo y | name_of_binary生成y CrLf,即y后面的空格;应该是echo y| name_of_binary

相关问题 更多 >