【发布时间】:2014-06-23 06:56:35
【问题描述】:
我有一个名为 tsfoil2.exe 的可执行文件,我想在我的 python 环境中操作这个 .exe。 我在 Windows 7 上运行 Python 2.7.3 和 Spyder 2.1.11。
为了运行 .exe,它需要一些输入、默认硬盘驱动器 ('I:\')、输出文件的名称 ('test') 和输入文件的名称 ('SC20610. inp')。
我的一位同事建议我使用 os.system,并为其提供一个包含所有参数的临时输入文件。
f = open('temp', 'w')
f.write('I:\ \n')
f.write('test \n')
f.write('SC20610.inp\n')
f.close()
然后我通过以下方式为该文件提供 .exe 的参数:
os.system("tsfoil2.exe < temp")
这一切都有效,但程序需要“ENTER”才能关闭。出于某种原因,.exe 反复要求“按 ENTER 键退出”。甚至,当我在 Spyder 控制台中按下回车键时,程序也不会终止。
有没有办法将“ENTER”键作为 .exe 的交互式输入? 我尝试使用 SendKeys 类,但由于程序没有终止,它没有到达包含 SendKeys 命令的代码行。 我也尝试将它包含在参数文件中,但这也不起作用。
此外,我还发现切换到子进程命令可能会有所帮助,因为它可能会给我更多的执行命令,但我无法使用输入文件运行可执行文件。
是否可以使用 os.system 提供必要的“ENTER”,或者我应该切换到子进程,如果可以,我该如何构造类似于 os.system("tsfoil2.exe
我试过这个:
import subprocess as sub
f = open('temp', 'w')
f.write('I:\ \n')
f.write('test \n')
f.write('SC20610.inp\n')
f.close()
proc=sub.Popen(["tsfoil2.exe","temp"], shell=True)
还有这个
import subprocess as sub
p=sub.Popen('tsfoil2.exe')
p.communicate(input='I:' )
但是,程序不响应给定的参数。
MWE:
import os
f = open('temp', 'w')
f.write('I:\ \n')
f.write('test \n')
f.write('SC20610.inp\n')
f.close()
os.system("tsfoil2.exe < temp")
这两个程序都可以通过http://www.dept.aoe.vt.edu/~mason/Mason_f/tsfoil2.exe找到,输入文件可以通过http://www.dept.aoe.vt.edu/~mason/Mason_f/SC20610.inp找到。
我希望一切都清楚,你可以帮助我。
【问题讨论】:
-
确保文件末尾有一个空行。
标签: python windows subprocess os.system