我正在使用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