使用python与命令行程序进行交互

时间:2017-12-11 20:57:05

标签: python

(python的新东西,所以忍受我...)

我有一个简单的java jar文件,它在执行时会在命令提示符中询问用户一些基本数据,然后根据这些数据执行操作。 我想编写一个简单的python脚本,它将自动执行这个jar文件,而无需用户提供数据,这意味着在脚本中编写数据,并在命令提示符询问时基本上与java应用程序进行交互。 / p>

想想通过运行Java -jar someJavaApp.jar执行的java文件 然后命令提示符要求您输入名称。你输入它然后按回车键,然后它会询问你的姓氏,你输入它然后按回车键然后java应用程序根据输入执行任意操作。

我想要一个python脚本,我可以多次执行java应用程序,每次都可以从文件或类似的东西中获取不同的输入。 任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用subprocess模块中的Popen

这是一个简单的示例,第一个提示输入并返回一些输出的脚本,test_input.py

first = input("Enter your first name: ")
second = input("Enter your second name: ")
print(first+second)

然后脚本调用第一个脚本:

import subprocess

values = (("A", "B"), ("C", "D"), ("E", "F"))

command = "python test_input.py"
for first, second in values: 
    # lazy use of universal_newlines to prevent the need for encoding/decoding
    p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, universal_newlines=True)  
    output, err = p.communicate(input="{}\n{}\n".format(first, second))
    # stderr is not connected to a pipe, so err is None
    print(first, second, "->", end="")
    # we just want the result of the command
    print(output[output.rfind(" "):-1])  # -1 to strip the final newline

这将打印:

A B -> AB
C D -> CD
E F -> EF 

如果您在使用Java程序时遇到问题,快速解决方案可能是在shell=True函数调用中指定Popen。但是你要注意security considerations