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

问题描述 投票:0回答:2

我有一个名为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代码,可执行文件,和一堆样本inout文件。 我不希望有人真的去看所有的东西并尝试它,但它在这里,以防你感到无聊。

最终更新方案

呜呜,我们已经做到了,大家。原来有一个api可以让这样的事情变得简单! 它叫做pexpect。

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上的略有不同。

python subprocess command-line-interface
2个回答
0
投票

就像其他人说的,如果'input.in'和'output.out'不改变,你可以直接做。

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

也许你的意思是你想用python指定输入和输出的值?

in_ = input("Enter input file name")
out_ = input("Enter output file name")

os.system(f'idrag.exe {in_} {out_}')

0
投票

试试吧。

idrag.exe input.in output.out

在命令行里一次输入所有的值。


0
投票

由于我不想下载一个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.txt\nbar.txt\n')[0])

测试时,将对 "idrag.bat "的调用替换为 "idrag.exe"


0
投票

有一个api可以让这样的事情变得简单!它叫pexpect。它叫做 pexpect。

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上的略有不同。


0
投票

试试

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

我认为问题是你想在程序运行后自动输入,这和输入命令行参数感觉是一样的,但技术上是不同的。

请看这里 疑问

© www.soinside.com 2019 - 2024. All rights reserved.