Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.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_Python 3.x - Fatal编程技术网

从python调用Java应用程序时无法读取文件

从python调用Java应用程序时无法读取文件,java,python,python-3.x,Java,Python,Python 3.x,我有一个Java程序,读取一个文件(其中包含来自本机语言的字符),然后填充一个字符串。当程序直接运行时,它工作正常 但是当从Python调用相同的程序时,它就无法填充字符串 public static void main(String[] args) { File inputFile = new File("input.txt"); BufferedReader br = new BufferedReader(new InputStreamRead

我有一个Java程序,读取一个文件(其中包含来自本机语言的字符),然后填充一个字符串。当程序直接运行时,它工作正常

但是当从Python调用相同的程序时,它就无法填充字符串

        public static void main(String[] args) {
        File inputFile = new File("input.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile),"UTF-8"));
      string output = "";
        while ((line = br.readLine()) != null) {
           // This block never hits when invoked by python. It works fine when java program runs directly.
           output +=line+" ";
         }
         ...
         }
从Python中,我调用它如下

cmd = ['java', java_class]
subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)

有什么意见吗?顺便说一句,我使用的是Atom IDE,不确定这是否有什么区别。

我试过你的例子,它对我有效。让我们看看它是否适合你。然后我会回答你我对这个问题的看法

import java.io.*;


public class Python2JavaMessaging {
        public static void main(String[] args) {
                try {
                        BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
                        PrintWriter writer = new PrintWriter("result.txt", "UTF-8");
                        String s = bufferRead.readLine();
                        while(s.equals("x")==false) {
                                writer.println(s);
                                s = bufferRead.readLine();
                        }
                        writer.close();
                } catch(IOException e) {
                        e.printStackTrace();
                }
        }
}
Python脚本如下所示:

#!/usr/bin/python

import subprocess

cmd = ['java', '-classpath', '.' , 'Python2JavaMessaging']
p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, encoding='utf8')

p.stdin.write("First line\r\n")
p.stdin.write("Second line\r\n")
p.stdin.write("x\r\n") # this line will not be printed into the file

您得到的错误是什么?没有错误。只是我的输出是空的,而不是文件的内容。检查这篇文章@TheRoy,谢谢分享链接。但不确定这个链接是否有用,它只是告诉我们如何用python读取java程序的输出。我能够从python调用java应用程序。问题是,当从python调用java应用程序时,它无法读取文件的内容,而当java应用程序直接运行时,文件的内容是完全可读的。顺便说一句,我使用了stdin来编写。我们也可以将其更改为文件。在你的情况下,input.txt你能帮我提供一个文件样本吗。另外,再次强调一下,如果我的文件内容是英语,那么一切正常。它不工作,只有当我有一些母语的文件内容。你需要使用正确的编码。我在示例中使用了编码。尝试您的母语特定编码。检查此帖子是否写入文件。如果您认为您的查询已通过这些解决,那么请接受答案以关闭该线程。