【发布时间】:2016-11-03 11:44:05
【问题描述】:
我有一个软件 - FUNCOR2.exe - 用于计算给定数据文件的自相关函数,即 test.txt。
首先,我从 Windows 命令行执行FUNCOR2.exe,然后程序控制并询问我输入数据文件。
我想在 Python 中自动化这个,所以我可以使用工作:
os.system("FUNCOR2")
但是我无法在程序中输入输入文件名。
到目前为止我已经尝试过:
PressKey(0x54) # T
PressKey(0x45) # E
PressKey(0x53) # S
PressKey(0x54) # T
PressKey(110) # .
PressKey(0x54) # T
PressKey(0x58) # X
PressKey(0x54) # T
我从Generate keyboard events 拿的,但它不起作用,还有:
win32api.keybd_event(0x54, 0)
win32api.keybd_event(0x45, 0)
win32api.keybd_event(0x53, 0)
win32api.keybd_event(0x54, 0)
win32api.keybd_event(110, 0)
win32api.keybd_event(0x54, 0)
win32api.keybd_event(0x58, 0)
win32api.keybd_event(0x54, 0)
它也不起作用。
这个程序不接受参数,所以我不能使用:
FUNCOR2.exe test.txt
我在这里找到了类似的东西:Writing in the cmd after executing an app.exe from java,但根本没有。
有什么想法吗?
【问题讨论】:
-
它真的是 MS-DOS 程序,还是 Windows 命令行程序? MS-DOS 不支持多任务处理,当另一个进程正在运行时你不能做任何事情。在后一种情况下,您可以使用 Python 的
subprocess。 -
我相信 99% 它是一个 MS-DOS 程序,不能从其他地方启动,只能从控制台启动。我只需要一种模拟键盘的方法。
-
如果这是一个执行标准统计计算的程序(并且自相关是相当标准的),它的功能可能包含在 padas/scipy/numpy 的某个地方。直接从 Python 数据分析库中弄清楚如何做可能会更好地利用时间。
-
VBScript 程序可以接受命令行参数。如果你真的想走这条路,写一个 VBScript 程序来做你想做的事情(使用
SendKeys)然后从 Python 调用它可能会更容易。您将遇到许多相同的问题,但使用的是更接近 Windows 的语言。至少,你会找到更多关于使用SendKeys运行 MS-DOS 程序的资源,然后你会找到关于使用 Python 的资源。 -
MS-DOS 程序是控制台应用程序,但并非所有控制台应用程序都是 MD-DOS 程序!考虑阅读这篇文章:The Windows command prompt is NOT a DOS prompt!