Запуск скриптов Python на Java - PullRequest
2 голосов
/ 25 января 2012

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

Теперь я столкнулся с проблемой при попытке вызвать скрипт 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....

    }

1 Ответ

3 голосов
/ 06 апреля 2012

Вместо String для команды, разделите ее на куски и сделайте 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();

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

...