Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python编译java_Java_Python_Compilation_Javac - Fatal编程技术网

从python编译java

从python编译java,java,python,compilation,javac,Java,Python,Compilation,Javac,我正在编写一个脚本,从python中编译一个.java文件 但是错误 import subprocess def compile_java(java_file): cmd = 'javac ' + java_file proc = subprocess.Popen(cmd, shell=True) compile_java("Test.java") 错误: javac is not recognized as an internal or external command

我正在编写一个脚本,从python中编译一个.java文件 但是错误

import subprocess
def compile_java(java_file):
    cmd = 'javac ' + java_file 
    proc = subprocess.Popen(cmd, shell=True)

compile_java("Test.java")
错误:

javac is not recognized as an internal or external command windows 7
我知道如何解决windows上CMD的问题。但是我如何为python解决它呢? 我的意思是:我如何设置路径

proc = subprocess.Popen(cmd, shell=True, env = {'PATH': '/path/to/javac'})


您还可以发送参数:

            variableNamePython = subprocess.Popen(["java", "-jar", "lib/JavaTest.jar", variable1, variable2, variable3], stdout=subprocess.PIPE)
            JavaVariableReturned = variableNamePython.stdout.read()
            print "The Variable Returned by Java is: " + JavaVariableReturned
接收这些变量的Java代码如下所示:

public class JavaTest {
    public static void main(String[] args) throws Exception {
        String variable1 = args[0];
        String variable2 = args[1];
        String variable3 = args[2];

你确定javac确实在你的Windows路径上吗?这可能就是它所使用的,而不是设置
PATH
,为什么不简单地提供
javac
(或者在您的例子中是
javac.exe
)的绝对路径呢?您可以试试os.environ['PATH']=PathToJava,看看是否有效。它在Linux上工作,但我从未在Windows上尝试过。欢迎使用堆栈溢出!您是否可以更改您的示例,使其适用于当前的问题,即调用
javac Test.java
而不是
java-jar lib/JavaMail.jar
?您真的不需要
shell=True
,只需将参数作为
列表传递给Jean Françoisfare即可,对于我们不知道的其他环境设置,他可能需要它;它在问题中,所以我把它留在了答案中。
public class JavaTest {
    public static void main(String[] args) throws Exception {
        String variable1 = args[0];
        String variable2 = args[1];
        String variable3 = args[2];