Использование ProcessBuilder в Java для запуска сценария Python требует ввода данных после инициализации [дубликат]JAVA

Программисты JAVA общаются здесь
Anonymous
Использование ProcessBuilder в Java для запуска сценария Python требует ввода данных после инициализации [дубликат]

Сообщение Anonymous »

Я новичок в программировании и учусь в университете. В качестве забавного побочного задания к учебе я пытаюсь создать простое приложение для ноутбука на Java, которое использует Whisper Open AI для расшифровки аудиофайла. Моя идея состоит в том, чтобы использовать класс ProcessBuilder для запуска кода Python в cmd для получения результата в моем Java-приложении. До сих пор мне удавалось заставить мое Java-приложение запускать код Python, но я хотел бы иметь возможность определять, какой файл транскрибируется из моего Java-приложения. Я изменил Python, чтобы получать имя файла в качестве входных данных.
Вот код Python, запускающий Whisper:

Код: Выделить всё

import whisper

model = whisper.load_model("base")
filename = input("Enter filename:")
result = model.transcribe(filename)
print(result["text"])
А вот мой метод Java, который запускает Whisper.py с помощью ProcessBuilder:

Код: Выделить всё

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Whisper {

public Whisper(){

}

public void runWhisper(String filename){

ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd \"C:\\Users\\Elias Illeris Poggi\\Documents\\ITU - Software Design\\Introductory Programming\\Notebook proj\" && python399 Whisper.py");
builder.redirectErrorStream(true);

try{
Process p = builder.start();

BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}
catch(IOException ioe){

}

}

}

Он может запускать Whisper.py, но только если я определил, какой файл транскрибировать в Whisper.py. Если я попытаюсь заставить Whisper.py получать входные данные в виде кода, написанного выше, я не знаю, как я могу заставить процесс построитель справиться с этим.
Заранее большое спасибо!
Я пробовал это:

Код: Выделить всё

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Whisper {

private String transcribed;

public Whisper(){

this.transcribed = "";

}

public void runWhisper(String filename){

ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd \"C:\\Users\\Elias Illeris Poggi\\Documents\\ITU - Software Design\\Introductory Programming\\Notebook proj\" && python399 Whisper.py &&" + filename);
builder.redirectErrorStream(true);

try{
Process p = builder.start();

BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
transcribed = line;
}
}
catch(IOException ioe){

}

}

}

Я хотел, чтобы результат Whisper был назначен строке, транскрибированной в которую можно было бы затем обработать результат оттуда.

Подробнее здесь: https://stackoverflow.com/questions/789 ... input-afte

Вернуться в «JAVA»