我正在使用Raspberry Pi从RC522阅读器接收某些RFID卡的UID。我正在运行的Python脚本在这里:https://github.com/mxgxw/MFRC522-pythonJava - 运行Python脚本和监视器连续输出
由于各种原因,我不会进入,我必须在Java中处理这些ID。
看来最可行的解决方案是运行python脚本并将结果读入到Java中。问题是,Python代码给出连续输出输出,即它将打印卡的ID到控制台窗口中,并且当卡片被轻敲到读取器上时,并且将仅在用户的命令上终止。
我目前使用的ProcessBuilder执行脚本,但现在看来似乎更适合于运行程序,并在不久的结果读回Java(当然这是空如果我不被窃听卡上的读卡器)。我试着在一段时间(true)循环,不断启动进程执行的代码 - 但是,这并不工作:
import java.io.*;
public class PythonCaller {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// set up the command and parameter
String pythonScriptPath = "/home/pi/MFRC522-python/Read.py";
String[] cmd = new String[3];
cmd[0] = "sudo";
cmd[1] = "python"; // check version of installed python: python -V
cmd[2] = pythonScriptPath;
// create runtime to execute external command
ProcessBuilder pb = new ProcessBuilder(cmd);
// retrieve output from python script
pb.redirectError();
while(true){
Process p = pb.start();
System.out.println("Process Started...");
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
int ret = new Integer(in.readLine()).intValue();
System.out.println("value is : "+ret);
}
}
}
在控制台窗口中的输出是空白 - 没有抛出异常,的println的。
任何帮助将大规模赞赏!
感谢
编辑 - 我已经包围我的代码在try/catch来看看有没有在所有的东西被抛出,它似乎并没有被
嗨,感谢您的帮助! 我复制了你的解决方案,它完美地适用于test.py - 用实际的程序代替它仍然不会在控制台上显示“Process Started ...”以外的任何内容..... 奇怪的是因为从命令行运行Read.py本身会产生所需的输出而不会出现问题...... – MWoot
完成了一个hacky的解决方法,但我对upvoting您的答案,因为这仍然给了我一些非常有用的提示,所以谢谢! – MWoot