我正在使用 python 脚本来自动化涉及批处理文件的过程。这些是用于其他应用程序的批处理文件,我不允许编辑它们。
在批处理文件的末尾,它会提示以下内容:
“按任意键继续 ...”
出现这个提示时如何使用python识别,如何响应?我希望能够关闭该文件,以便运行下一个批处理文件。
目前我找到了以下解决方案,但这很糟糕,让我觉得内心很脏:
#Run the batch file with parameter DIABFile
subprocess.Popen([path + '\\' + batchFile, path + '\\' + DIABFile])
#Sit here like an idiot until I'm confident the batch file is finished
time.sleep(4)
#Press any key
virtual_keystrokes.press('enter')
有任何想法吗?
尝试#1
p = subprocess.Popen([path + '\\' + batchFile, path + '\\' + DIABFile],
bufsize=1, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
while p.poll() is None:
line = p.stdout.readline()
print(line)
if line.startswith('Press any key to continue'):
p.communicate('\r\n')
导致以下输出和错误:
b'\r\n'
Traceback (most recent call last):
File "C:\workspace\Perform_QAC_Check\Perform_QAC_Check.py", line 341, in <module>
main()
File "C:\workspace\Perform_QAC_Check\Perform_QAC_Check.py", line 321, in main
run_setup_builderenv(sandboxPath, DIABFile)
File "C:\workspace\Perform_QAC_Check\Perform_QAC_Check.py", line 126, in run_setup_builderenv
if line.startswith('Press any key to continue'):
TypeError: startswith first arg must be bytes or a tuple of bytes, not str
The process tried to write to a nonexistent pipe.
对我来说最奇怪的部分是开头的第一个 arg 必须是字节或字节元组,而不是 str。我查看了文档,它肯定应该是一个字符串?开始教程
所以我上网查了一下,发现了一点。
该错误消息似乎是 Python 中的一个错误,因为它正好相反。但是,这里没有问题,在 indian.py 的第 75 行之后添加
try:
line = line.decode()
except AttributeError:
pass
所以我做到了。
尝试#2
p = subprocess.Popen([path + '\\' + batchFile, path + '\\' + DIABFile],
bufsize=1, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
while p.poll() is None:
line = p.stdout.readline()
print(line)
try:
line = line.decode()
if line.startswith('Press any key to continue'):
p.communicate('\r\n')
except AttributeError:
pass
导致以下输出:
b'\r\n'
b'Build Environment is created.\r\n'
b'\r\n'
b'Please Refer to the directory: C:/directory\r\n'
b'\r\n'
然后它挂在那里......这是“请按任意键继续”应该出现之前的最后一个输出,但它永远不会出现。
笔记
从那以后,我使用了第二个脚本并要求它找到“请参考”,它确实如此。不幸的是,然后脚本再次挂在该行:
p.communicate('\r\n')
再次结束程序,打印错误:
The process tried to write to a nonexistent pipe.
我相信这与这个错误有关。
我无法想象我想要做的是与众不同的。由于这似乎比预期的要复杂一些,我想说我使用的是 XP 和 Python 3.3 版。