Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    10

    Eseguire uno script Python da Eclipse (su una JSP)

    Eseguire uno script Python da Eclipse (su una JSP)

    Salve a tutti,
    sto sempre realizzando una Web Application e ho assoluta necessità di eseguire uno script in Python.

    Riprovo a inserire qui, pregando che qualcuno anziché obiettare, riesca a darmi una mano.

    Ho cercato molto sulla rete, ho provato sia con Runtime.exec che con ProcessBuilder, ma in entrambi i casi ho miseramente fallito.

    Il messaggio che mi ritorna è:
    codice:
    Cannot run program "python": CreateProcess error=2, Impossibile trovare il file specificato] with root cause java.io.IOException: CreateProcess error=2, Impossibile trovare il file specificato
    E' per caso necessario fare qualche operazione preliminare, tipo su Tomcat, o nella configurazione di Eclipse?


    Ecco il codice che ho scritto in entrambi i casi:

    codice:
    Runtime p1 = Runtime.getRuntime(); p1.exec("python genericXMCDAService.py -n ElectreConcordance-J-MCDA --submit-and-wait-solution alternatives:alternatives.xml criteria:criteria.xml weights:weights.xml performances:performances.xml");

    [CODE]ProcessBuilder pb = new ProcessBuilder("python", "genericXMCDAService.py", "-n", "ElectreConcordance-J-MCDA", "--submit-and-wait-solution", "alternatives:alternatives.xml", "criteria:criteria.xml", "weights:weights.xml", "performanceserformances.xml"); Process p = pb.start();[CODE]
    (naturalmente in questo caso ho importato java.lang.ProcessBuilder)

    HELP PLEASE
    Grazie

    P.S.: Ho anche provato a configurare diversamente Tomcat, usando questa guida: http://lekshmideepu.blogspot.it/201...python-cgi.html
    Risultato... niente da fare

    Se non risolvo questo problema, sono fermo come un cretino. Se qualcuno dà sfoggio di un po' di santa santa pazienza, lo ringrazio come posso...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Eseguire uno script Python da Eclipse (su una JSP)

    Originariamente inviato da marasma
    Il messaggio che mi ritorna è:
    codice:
    Cannot run program "python": CreateProcess error=2, Impossibile trovare il file specificato] with root cause java.io.IOException: CreateProcess error=2, Impossibile trovare il file specificato
    codice:
    Runtime p1 = Runtime.getRuntime(); p1.exec("python genericXMCDAService.py -n ElectreConcordance-J-MCDA --submit-and-wait-solution alternatives:alternatives.xml criteria:criteria.xml weights:weights.xml performances:performances.xml");
    Qui ci sono almeno 2 questioni:

    1) Innanzitutto 'python' si presuppone che sia un eseguibile: esiste da qualche parte? e soprattutto è in PATH? (altrimenti dovresti specificare un percorso assoluto).

    2) Passi un nome di file 'genericXMCDAService.py': dove è fisicamente questo file? non avendo specificato un path, si presuppone che sia nella directory "corrente", quindi la questione è: quando la JVM che fa girare Tomcat viene avviata ... quale è la directory "corrente"? Anche qui se non la sai o non la puoi controllare, dovresti specificare un percorso assoluto (o relativo se non troppo complicato).

    Vedo che nel comando ci sono altri file es. alternatives.xml, sono file che devono essere presenti (e dove?) o vengono generati (e dove?).

    Inoltre una questione finale (quando riuscirai a farlo funzionare): la esecuzione di quello script genera dell'output su standard-output/error? Perché se ne fa e anche tanto, allora devi leggerlo da Java, altrimenti per questioni di buffering la tua applicazione Java può arrivare a bloccarsi.

    A parte quest'ultima questione, le altre ti sono chiare? Non si tratta tanto di Tomcat o Eclipse, si tratta di sapere e/o poter controllare i path delle cose che usi. Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    10
    Ciao Andrea e grazie per la risposta.
    Comincio col dire che, fermandomi solo per dormire qualche ora, son riuscito a trovare una quadra, grazie anche all'aiuto di un amico.
    La mia soluzione (di quelle che noi chiamiamo "pastorali") è stata affidare a Java soltanto uno shell ad un file batch (sui quali sono ben più ferrato) e, così facendo, tutto funziona.

    Se si riuscisse a migrare tutto su Java sarebbe fantastico, anche per fare un po' d'ordine, visto che così, a parte i batch, sono costretto a tenere tutti i files nella stessa directory (a parte quella di Python, tra l'altro python.exe è un eseguibile, certo, ed è nella directory impostata come path).

    Per quanto riguarda il resto, nella fattispecie:
    - genericXMCDAService.by è uno script che contiene le chiamate SOAP per chiamare svariati webservice, come ElectreConcordanceEccetera che c'è nell'esempio,

    - alternatives, criteria, weights e performances, tutti .xml, sono files di input che si trovano sempre nella stessa directory.

    La conclusione che ho raggiunto, dopo esser riuscito in batch e non in Java a chiamare i vari files, è che Runtime.exec non "parla" batchese, per cui se gli do un comando tipo "cd unacertapath" non funziona.

    Parte java:
    codice:
    String s; Process p; // Chiamo Electre-Concordance s = getServletContext().getRealPath("/"); p = Runtime.getRuntime().exec(s + "/batches/" + "callConc.bat");
    Parte batch:

    codice:
    @echo off
    cd %~dp0%~1
    cd..
    python genericXMCDAService.py -n ElectreConcordance-J-MCDA --submit-and-wait-solution alternatives:alternatives.xml criteria:criteria.xml weights:weights.xml performances:performances.xml

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da marasma
    è che Runtime.exec non "parla" batchese, per cui se gli do un comando tipo "cd unacertapath" non funziona.
    No, solo così non funziona infatti. Java si limita a lanciare un "eseguibile" (qualunque cosa la piattaforma ritiene per "eseguibile", es. exe su Windows).

    Un "cd qualcosa" è riconosciuto invece dall'interprete dei comandi, sui Windows recenti è il cmd.exe l'interprete dei comandi, sui Linux è la bash o altre. Se lanci da Java l'interprete dei comandi e gli passi un suo comando specifico ... certo che funziona.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.