1

我正在尝试使用 Python 2.7 脚本自动化需要通过 GUI 输入的 Windows 应用程序。我通过内置的 python 子进程函数调用 exe,如下所示:

导入子流程

cc='C:\MM\test.exe'

subprocess.call(cc)

调用 exe 时,GUI 要求我手动输入输入文件的路径,即 data.txt 文件。当我进入路径处理就可以开始了。我想以某种方式自动化这个过程,即只需调用 exe 并让它自己找到 input.txt,而且重要的是,将输出打印到 output.txt 文件中。

我最初尝试了以下建议:

导入子流程

使用 open(r'C:\MMA\DATA\input.txt', 'r') 作为 input_file, open(r'C:\MMA\DATA\output.txt', 'w') 作为 output_file: subprocess.call (['C:\MM\test.exe'],标准输入=输入文件,标准输出=输出文件)

然而,这并不成功;exe 仍然要求我手动输入输入文件路径。

我不知道如何在这里进行,我对这类问题没有经验,任何帮助将不胜感激。提前谢谢你,保罗。

4

2 回答 2

2

如果test.exe input.txt output.txt从命令行手动运行它也可以工作,那么在 Windows 上将输入/输出文件作为参数而不是通过 stdin/stdout 重定向传递会更加健壮:

from subprocess import check_call

inputfn = r'C:\MMA\DATA\input.txt'
outputfn = r'C:\MMA\DATA\output.txt'
check_call([r'C:\MM\test.exe', inputfn, outputfn], close_fds=True)

如果 test.exe 是一个 GUI 程序,那么您可以尝试SendKeys 模块(参见最后一个示例)

于 2012-11-11T14:37:21.623 回答
1

subprocess.call函数的文档为您提供了将被调用进程的标准输入/输出从/到文件重定向的正确语法:

import subprocess

with open(r'C:\MMA\DATA\input.txt', 'r') as input_file, open(r'C:\MMA\DATA\output.txt', 'w') as output_file:
    subprocess.call(['C:\MM\test.exe'], stdin=input_file, stdout=output_file)
于 2012-11-10T23:01:19.120 回答