如何使用python执行java程序,同时考虑输入和输出
发布时间:2020-12-20 11:23:45 所属栏目:Python 来源:网络整理
导读:将我的 python程序视为input.py import os.path,subprocessfrom subprocess import STDOUT,PIPEdef compile_java(java_file):subprocess.check_call(['javac',java_file])def execute_java(java_file):java_class,ext = os.path.splitext(java_file)cmd = ['
将我的
python程序视为input.py
import os.path,subprocess from subprocess import STDOUT,PIPE def compile_java(java_file): subprocess.check_call(['javac',java_file]) def execute_java(java_file): java_class,ext = os.path.splitext(java_file) cmd = ['java',java_class] proc = subprocess.Popen(cmd,stdout=PIPE,stderr=STDOUT) input=subprocess.Popen(cmd,stdin=PIPE) print proc.stdout.read() 我使用的Java文件是Hi.java import java.util.*; class Hi { public static void main(String args[]) { Scanner t=new Scanner(System.in); System.out.println("Enter any string"); String str=t.nextLine(); System.out.println("This is "+str); int a=5; System.out.println(a); } } 当我调用input.execute_java(Hi.hava)时,输出为“输入字符串”,当我输入字符串时说“Jon”,然后再次输出为“输入字符串这是Jon”,即它提供整个输出两次.由于代码打印proc.stdout.read(),可能是由于python代码输入= subprocess.Popen(cmd,stdin = PIPE)和第二次输出导致的一个输出 解决方法
您应该使用
communicate 而不是stdout.read.沟通的论点是子流程的输入.此外,当您实际上不希望shell执行命令时,传递shell = True是个坏主意.相反,将参数作为列表传递:
import os.path,PIPE def compile_java(java_file): subprocess.check_call(['javac',java_file]) def execute_java(java_file,stdin): java_class,ext = os.path.splitext(java_file) cmd = ['java',java_class] proc = subprocess.Popen(cmd,stdin=PIPE,stderr=STDOUT) stdout,stderr = proc.communicate(stdin) print ('This was "' + stdout + '"') compile_java('Hi.java') execute_java('Hi.java','Jon') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |