如何运行基于命令行的应用程序并输入文本?



我有一个名为idrag的程序.exe它完全基于命令行。它至少需要 2 个输入,每个输入周围有引号,"input.in"和"output.out"两者都由自己执行。input.in 是以前创建的文件,output.out 是程序写入的文件。如何打开此程序,键入" 'input.in'"按回车键,键入" 'output.out' "并按回车键?我可以通过os.system打开程序,但我还没有设法让子进程正常工作。

我遇到的一个大问题是一旦 idrag.exe 打开就能够打字。我知道我可以制作一个带有命令列表的.bat文件,但我不是输入命令,而是输入文本。

编辑:

对于那些感兴趣的人,这里是.exe直接下载链接。下面是指向示例输入文件的链接

编辑 2:

通常我运行 idrag.exe,键入"'input.in"按回车键,键入"'output.out"按回车键,idrag 计算它的东西并将 output.out 写入当前目录。

编辑 3(这可能会变得过多(:

这是一个编译一堆代码的网站,你可以按 ctrl + f 找到 idrags 部分。它包括所有 3 个 fortran 代码、可执行文件和一堆示例输入/输出文件。我绝不期望任何人真正经历所有内容并尝试一下,但它在这里以防您感到无聊。

最终更新/解决方案

呜,我们每个人都做到了。原来有一个 API 可以让这样的事情变得简单!它被称为期待。

from pexpect import popen_spawn

process = popen_spawn.PopenSpawn('idrag.exe')
process.sendline("'test1.in'")
process.sendline("'test1.out'")

注意:popen_spawn不会自动从 pexpect 调用,因此您必须专门调用它。此外,由于Unix的东西,Windows上的语法与Mac上的语法略有不同。

正如其他人所说,如果"input.in"和"output.out"没有改变,你可以这样做:

os.system('idrag.exe input.in output.out')

也许你的意思是希望能够使用 python 指定 input.in 和 output.out 的值?

in_ = input("Enter input file name")
out_ = input("Enter output file name")
os.system(f'idrag.exe {in_} {out_}')

尝试:

idrag.exe input.in output.out

一次在命令行中键入它。

由于我不想下载 EXE 文件,因此我将尝试使用 Windows 批处理文件模拟所述 EXE,该文件要求键入两个字符串。

给定 "idrag.bat" 为

@echo off
set /p foo=enter input file: 
set /p bar=enter output file: 
echo %date%>%bar%
echo %time%>>%bar%
echo %foo%>>%bar%
type %bar%

我们可以使用以下 python 脚本将 "foo.txt" 和 "bar.txt" 传递给 "idrag.bat">

from subprocess import Popen, PIPE
process = Popen(["idrag.bat"], stdin=PIPE, stdout=PIPE, text=True)
print(process.communicate(input='foo.txtnbar.txtn')[0])

要进行测试,请将对"idrag.bat"的调用替换为"idrag.exe">

有一个 API 可以让这样的事情变得简单!它被称为期待。

from pexpect import popen_spawn

process = popen_spawn.PopenSpawn('idrag.exe')
process.sendline("'test1.in'")
process.sendline("'test1.out'")

注意:popen_spawn不会自动从 pexpect 调用,因此您必须专门调用它。此外,由于Unix的东西,Windows上的语法与Mac上的语法略有不同。

尝试

os.system("idrag.exe < 'input.in' < 'output.out'")

我认为问题是您希望在程序运行时自动输入,这感觉相同,但在技术上与输入命令行参数不同。

见问题

最新更新