2014-12-03 4 views
8

Я пытаюсь выполнить .py-файл из java-кода. Я двигаюсь .py файла в директории по умолчанию моего Java проекта, и я называю его, используя следующий код:Запуск файла .py с Java

String cmd = "python/"; 
    String py = "file"; 
    String run = "python " +cmd+ py + ".py"; 
    System.out.println(run); 
    //Runtime.getRuntime().exec(run); 

    Process p = Runtime.getRuntime().exec("python file.py"); 

либо с помощью переменных бежать, или весь путь или «питон file.py» мой код работает показывая сообщение построить успешное общее время 0 секунд без выполнения file.py. В чем моя проблема?

+0

«Построить успешный» звучит как в результате компиляции * *. Как вы это используете? – Biffen

+2

Возможный дубликат [Как запустить файл Python с Java с помощью Абсолютного пути?] (Http://stackoverflow.com/questions/21081898/how-to-run-a-python-file-from-java-using- an-absolute-path) –

+0

Я запускаю его либо кнопкой воспроизведения, либо щелчком правой кнопки мыши и запускаем файл. –

ответ

7

Вы можете использовать, как это также:

String command = "python /c start python path\to\script\script.py"; 
Process p = Runtime.getRuntime().exec(command + param); 

или

String prg = "import sys"; 
BufferedWriter out = new BufferedWriter(new FileWriter("path/a.py")); 
out.write(prg); 
out.close(); 
Process p = Runtime.getRuntime().exec("python path/a.py"); 
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String ret = in.readLine(); 
System.out.println("value is : "+ret); 

Run Python script from Java

+0

Что такое переменная param? Я запускаю эту строку String c = "python c start python influencersDataset_edgelist.py"; Процесс p = Runtime.getRuntime(). exec (c), но тот же он просто создается за 0 секунд. –

+0

Параметр @FereRes означает, что вы хотите отправить параметр в скрипте так вот так ... – Prateek

+0

Странно, если я скопирую путь python \ to \ script \ script.py, чтобы консоль работала нормально, однако здесь с pb он не реагирует. –

4

Я считаю, что мы можем использовать ProcessBuilder

Runtime.getRuntime().exec("python "+cmd + py + ".py"); 
..... 
since exec has its own process we can use that 
ProcessBuilder builder = new ProcessBuilder("python", py + ".py"); 
builder.directory(new File(cmd)); 
builder.redirectError(); 
.... 
Process newProcess = builder.start(); 
+0

Исключение из потока «main» java.io.IOException: Не удается запустить программу «python» (в каталоге «python python \ file.py»): Ошибка CreateProcess = 267. Недопустимое имя каталога. Я протестировал весь путь, но я получил то же самое. –

+0

попробуйте изменить строку на массив. Я считаю, что это сработает. 'String [] cmd = new String [] {" python, "...", ".."} ' – Maddy

+0

Не удается запустить программу« python »(в каталоге« python C: \ Users \ path \ file.py »): CreateProcess error = 267, Недопустимое имя каталога. Я использую String [] command = new String [] {"python", cmd + py + ". Py"}; –

1

Вы можете запустить питон скрипт

Process p = Runtime.getRuntime().exec(PYTHON_ABSOLUTE_PATH, script_path) 

Чтобы получить PYTHON_ABSOLUTE_PATH просто введите

which python2.7 

в терминале

Смежные вопросы