Problem&& what Im doing我写了一个Python脚本,它使用Windows硬件ID检查计算机的端口以搜索特定的读取器,并相应地返回True或False。问题是当我在Java环境中使用BufferedReader和InputStreamReader运行脚本时,Python存在代码9009。
python脚本应该根据连接到计算机的USB读卡器的状态返回true或false值。如上所述,脚本在单独运行时(在IntelliJ,PyCharm和VS Code上)工作。当它试图在我的java程序上运行时,它返回以下内容:
- Python脚本退出代码:9009*
我尝试过的事情:
1.检查python解释器/版本/等.|代码运行在我的java IDE(IntelliJ)中
1.在外部运行代码以检查错误|代码在其他任何地方都能正常运行,只是在Java上不行。
1.使用不同版本的文件路径(绝对路径和内容根目录中的路径)|没有工作,下面添加的代码使用绝对路径。
Python脚本
import usbmonitor
from usbmonitor.attributes import ID_MODEL, ID_MODEL_ID, ID_VENDOR_ID
lookFor= "USB\\VID_058F&PID_9540\\5&54725E2&0&2"
def is_connected(lookFor):
# Create the USBMonitor instance
monitor = usbmonitor.USBMonitor()
# Get the current devices
devices_dict = monitor.get_available_devices()
# Check if the device is connected
for device_id, device_info in devices_dict.items():
if device_id.split('\\')[1] == lookFor.split('\\')[1]:
return True
return False
# Look for the specific device
if is_connected("USB\\VID_058F&PID_9540\\5&54725E2&0&2"):
print("Found")
else:
print("Not Found")
if __name__ == "__main__":
print("hello world from python file at: src/java/findUSB.py")
print(is_connected(lookFor))
# Path: src\java\findUSB.py
字符串
Java代码
public boolean usbConnected() {
try {
String pythonScript = "python3"; // Specify the Python interpreter to use (use "python" for Python 2)
String scriptPath = "C:\\CS IA\\src\\java\\findUSB.py"; // Path to the Python script
ProcessBuilder processBuilder = new ProcessBuilder(pythonScript, scriptPath);
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
boolean isConnected = false; // Initialize the boolean variable
while ((line = reader.readLine()) != null) {
// Process output of Python script and update the boolean variable
isConnected = Boolean.parseBoolean(line.trim());
}
int exitCode = process.waitFor();
System.out.println("Python script exited with code: " + exitCode);
// Now you can use the 'isConnected' variable to check the result
if (isConnected) {
System.out.println("The device is connected.");
return true;
}
else {
System.out.println("The device is not connected.");
return false;
}
}
catch (IOException | InterruptedException e) {
e.printStackTrace();
return false;
}
型
可能有用的信息:
- 脚本的绝对路径 *:C:\CS IA\src\java\findUSB.py * 根路径 *:src/java/findUSB.py *python版本 *:Python 3.11.4 * 代码文件 *:https://drive.google.com/drive/folders/1wl5pSE24Bt6ToKm0Q-tNP-2F_05wlWPi?usp=sharing
- 快速说明:我知道有一种简单的方法可以使用专用的java终端包进行此检查,但我想提高我的python技能,因此选择使用python*
1条答案
按热度按时间os8fio9y1#
错误代码9009通常与系统无法找到命令或可执行文件的问题相关联。
我建议你只使用Java来实现这个功能。使用Java来调用Python并不是一个好主意。