2012-01-25 2 views
2

Я пытаюсь запустить скрипт python во время выполнения моего java-кода, потому что он будет зависеть от результата, полученного от скрипта python. До сих пор я пытался использовать jythonc, к сожалению, без успеха, и теперь я пытаюсь использовать java Runtime и java Process для выполнения скрипта python.Запуск сценариев Python в Java

Теперь у меня возникла проблема при попытке вызвать скрипт python. Мне кажется, что он даже не вызывает сценарий, потому что для перехода на следующую страницу требуется меньше пары секунд.

Может ли проблема быть в том, как я называю сценарий python? Я пытаюсь запустить это через веб-приложение ...

Вот некоторые из моего кода:

String run = "cmd /c python duplicatetestingoriginal.py" ; 

    boolean isCreated = fwr.writeFile(BugFile, GD, 500, true, 5, "LET"); 

    if(isCreated){ 
     try{ 
      r = Runtime.getRuntime(); 
      p = r.exec(run); 
      BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); 

    String line = ""; 
    while ((line = stdInput.readLine()) != null) { 
       System.out.println(line); 
    } 
    while ((line = stdError.readLine()) != null) { 
       errorW.write(line); 
    } 

      int exitVal = p.waitFor(); 
      arrayList = fwr.readResults(); 
     }catch(Exception e){ 

     } 
    } 
    else{ 
     // troubleshoot.... 

    } 
+0

Вы работаете под Windows, да? Является ли «python» на вашем PATH? Что произойдет, если вы введете 'cmd/c python duplicatetestingoriginal.py' в Start -> Run ...? – Managu

+1

Вы также можете пересмотреть, как вы читаете stdInput/stdError. См. «Когда Runtime.exec не будет»: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html – Managu

+0

Да, я работаю в Windows, а python находится в моем PATH , Код запускается, когда я ввожу его в cmdline или запустил – Shahab

ответ

3

Вместо строки для команды, разделить его на куски и сделать String []. Не нужно указывать cmd /c, я думаю.

Это пример код из моего приложения:

//Running on windows 
command = new String[4]; 
command[0]=directory.getCanonicalPath()+"/data/ExtenalApp.exe"; //extenal commandline app, not placed in path, but in subfolder 
command[1]=directory.getCanonicalPath()+"/data/SomeFile.txt"; //file needed for the external app, sent as an argument 
command[2]=arg1; //argument for the app 
command[3]=arg2; //argument for the app 

//Running on Mac 
command = new String[6]; 
command[0]="python"; 
command[1]=directory.getCanonicalPath()+"/data/wp.py"; //path to the script 
command[2]="-F"; //argument/Flag/option 
command[3]="--dir="+path; //argument/option 
command[4]="--filename="+filename; //argument/option 
command[5]=argument; //argument/option 


Process process = Runtime.getRuntime().exec(command); 
process.waitFor(); 
process.destroy(); 

Я не обрабатывать ввод/вывод потоков, так как скрипт/приложение не требует ввода и выводит только тогда, когда закончил, ничего важного. Это может быть не так.

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