我正在尝试从python脚本执行批处理文件,使用python脚本作为批处理文件的“前端”,就像它一样。 (这是一个很长的故事,而且不相关。)
但是,批处理文件中包含挑战和响应,如:
:star
set /p var=Enter The Value:%=%
@echo %var%
if %var%!=%other_var% goto :star
基本上,它会提示用户输入,然后检查输入是否正确,如果没有提示用户反对。
如何在我的python脚本中读取提示,然后检查脚本是否再次提示我(IE。输入错误),或者是否通过?我目前正在使用子进程'Popen构造函数,我尝试了一个.stdout.readline()
循环,打印每一行,提示根本没有显示。 (循环成功捕获并读取所有行,但不是提示本身。)
我尝试了.communicate(input="foo\n")
,这在技术上有效,因为如果foo是预期变量,批处理文件将成功通过。如果没有,它只是锁定并永远等待。
我已经尝试过写入stdin,而这只是简单地锁定了几乎没有迹象表明发生了什么。
我该怎么办?
编辑: 继续进行实验,我尝试打开一个cmd.exe实例,然后运行命令。
import subprocess as sp
p = sp.Popen(["cmd.exe"], stdin=sp.PIPE, stdout = sp.PIPE, shell=True)
print("RUN")
# print(p.communicate(input=b"echo HELLO WORLD\n"))
for i in iter(p.stdout.readline, b''):
print(str(i))
p.stdin.write(b'echo HELLO WORLD!')
注释掉的.communicate
有效,但同样会阻塞,直到流程结束,这对挑战和回应事物来说并不是一个真正的选择。但是,.readline
和.stdin
接口不会。它打印:
b'Microsoft Windows [Version 6.1.7601]\r\n'
b'Copyright (c) 2009 Microsoft Corporation. All rights reserved.\r\n'
b'\r\n'
然后阻止那里直到我终止cmd.exe实例。
有什么想法吗?
EDIT2: 我很想拥有像pexpect for Windows这样的东西,然而,我能找到的唯一的东西似乎是几年前的最后一次更新,而且在Windows 7或更高版本上没有完全正常运行。