在特定程序取得控制权后,使用 Python 在 Windows 控制台中写入文本

Writing text in the Windows console using Python after a specific program have taken control

我有一个软件 - FUNCOR2.exe - 用于计算给定数据文件的自相关函数,即 test.txt.

首先,我从 Windows 命令行执行 FUNCOR2.exe,然后程序控制并要求我提供输入数据文件。

我想在 Python 中自动执行此操作,因此我可以使用 working:

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,但根本没有。

有什么想法吗?

我发现(除了你的问题)唯一提到 FUNCOR2 的是论文“A library of computer programs for assisting teaching and research in cyclostratigraphic analysis”。由于这是来自期刊 "Computers and Geosciences" 并且由于您在 GIS 领域,我认为这是正确的。

有几种可能性(除了发送击键,这充其量是冒险的):

1) 论文清楚地给出了所使用的公式(并快速浏览了实际的 Fortran 代码 downloadable from the Journal's website confirms that nothing else is done) suggests that this is easily implemented in Python, either straight-Python or using pandas(具有计算自相关的函数)。

2) 修改Fortran源码,用开源的Fortran编译器重新编译(我不是Fortran专家,但这好像是Fortran 77)。在代码的开头,您会看到:

READ (5,100,ERR=1) CFIL1
OPEN (1,FILE=CFIL1)

第一行是代码如何从用户那里获取文件名。用读取命令行参数的行替换该行,瞧——你有一个 FUNCOR2 的版本,它从命令行获取输入文件,因此很容易从 Python 调用。在 Fortran 中找到从命令行参数获取文件名的示例应该很容易。我的猜测是仅用 1 或 2 行代码替换该行就足够了。我没有足够的兴趣去尝试,并且怀疑它是否值得。这是因为源代码中的另一行是:

DIMENSION X(1024),V(1024),COR(200),NPA(200)

奇怪的是,如果您的文件包含超过 1024 个观测值,程序将失败。也许在 90 年代后期写这篇论文时这样的事情是有意义的,但几乎可以肯定有等效的 pandas 代码能够处理数百万次观察。有时应该允许旧代码消亡。