在批处理文件中自动响应命令行程序

时间:2011-11-03 03:43:49

标签: python windows batch-file cmd

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

如果需要,我无法弄清楚如何告诉shell回复'Enter'或'y'。如果它进入'按Enter继续'某种提示(其中不是很多,但足以引起问题)并回应'y',它会陷入一个奇怪的循环并且不会接受任何输入(它喷出成千上万的'按Enter键继续')。如果我先按顺序回显一个Enter然后按顺序回复'y',那可能会有效,但我尝试回复'Enter'按键的方法都不起作用。

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

2 个答案:

答案 0 :(得分:1)

输出批量输入的标准方法是echo/在一行中没有其他空格。要输出Enter后跟'Y',您可以尝试:(echo/&echo Y) | name_of_binary(不要在echo/&中插入空格。)

如果不起作用,那是因为在第一个Enter之后和Y之后插入的LineFeed字符。(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

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

答案 1 :(得分:0)

查看Expect for Windows

这就是你需要的一切。 Expect上有几本书,还有很多教程(包括样本)。您最喜欢的搜索引擎是您最好的朋友,但上面给出的Activestate网站网址包含您需要的所有内容。虽然您可能在教程和书籍方面找到的内容可能是以Unix为中心的,而这是预期的起源,但Windows期望并没有太大差异。

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