(python的新东西,所以忍受我...)
我有一个简单的java jar文件,它在执行时会在命令提示符中询问用户一些基本数据,然后根据这些数据执行操作。 我想编写一个简单的python脚本,它将自动执行这个jar文件,而无需用户提供数据,这意味着在脚本中编写数据,并在命令提示符询问时基本上与java应用程序进行交互。 / p>
想想通过运行Java -jar someJavaApp.jar执行的java文件 然后命令提示符要求您输入名称。你输入它然后按回车键,然后它会询问你的姓氏,你输入它然后按回车键然后java应用程序根据输入执行任意操作。
我想要一个python脚本,我可以多次执行java应用程序,每次都可以从文件或类似的东西中获取不同的输入。 任何帮助将不胜感激。
感谢。
答案 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。