我正在尝试运行一个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…”命令来解决这个问题?
签出Expect for Windows。
这就是你所需要的。有几本关于Expect的书,还有许多教程(包括示例)。你最喜欢的搜索引擎是你最好的朋友,但是上面给出的Activestate网站URL,有你需要的一切。虽然您在教程和书籍中可能会找到以Unix为中心的内容,这就是expect的起源,但是Windows expect并没有太大的不同。
Expect将允许您自动化批处理脚本中的命令行交互。
批量输出Enter的标准方法是
echo/
在没有额外空格的行中。若要输出后跟“Y”的回车,可以尝试以下操作:(echo/&echo Y) | name_of_binary
(不要在echo/&
中插入空格)。如果这不起作用,那是因为在第一个回车之后和Y之后插入的换行符。由
(echo/&echo Y
生成的字节的确切序列是:CrLfYCrLf
,其中Cr是回车,Lf是换行符。如果前面的方法有问题,您可以用这个批处理文件创建一个只有
CrY
字节的文件:然后按如下方式执行命令:
name_of_binary < EnterY.txt
。请注意,
echo y | name_of_binary
生成y CrLf
,即y
后面的空格;应该是echo y| name_of_binary
。相关问题 更多 >
编程相关推荐