2011-01-10 21 views
5

Próbuję uruchomić skrypty w języku Python, Ruby, C, C++ i Java z poziomu programu java, a Processbuilder został mi zaproponowany jako dobry sposób na uruchomienie skryptów. Z tego co rozumiem, Processbuilder w większości uruchamia rodzime pliki (.exe w oknach itp.). Słyszałem jednak kilka rzeczy o uruchamianiu skryptów (niestandardowych) za pomocą Processbuilder. Niestety, wszystko, co znajduję na ten temat, jest niewiarygodnie niejasne.uruchamianie skryptów za pomocą procesora

Jeśli ktoś mógłby wyjaśnić sposób uruchamiania niestandardowych skryptów, takich jak Python, Ruby itp., Byłbym bardzo wdzięczny!

Odpowiedz

6

Możesz sprawdzić ProcessBuilder documentation over at Sunoracle, ale w zasadzie możesz uruchomić interpreter dla języka skryptowego i przekazać skrypt, który chcesz do niego uruchomić.

Na przykład, powiedzmy, że masz skrypt /home/myuser/py_script.py i python jest w /usr/bin/

class ProcessRunner 
{ 
    public static void main(String [] args) 
    { 
     ProcessBuilder pb = new ProcessBuilder("/usr/bin/python", "/home/myuser/py_script.py"); 
     Process p = pb.start(); 
    } 
} 

niezwykle prostym przykładzie, można uzyskać hodowcy ze zmianą katalogu roboczego i zmienić otoczenie.

Można również zbudować ProcessBuilder z tablicą String lub podtypem List<String>. Pierwszą pozycją na liście powinien być program/plik wykonywalny, który chcesz uruchomić, a wszystkie poniższe elementy są argumentami do programu.

String pbCommand[] = { "/usr/bin/python", "/home/myuser/py_script.py" }; 
ProcessBuilder pb = new ProcessBuilder(pbCommand); 
Process p = pb.start(); 
+0

To działa! Dziękuję Ci bardzo! – Curlystraw

0

Aby uniknąć konieczności ręcznego wprowadzania całą lokalizację skryptu, który może również powodować problemy przenośność, oto co zrobiłem:

String pwd = System.getProperty("user.dir"); 

ProcessBuilder pb = new ProcessBuilder("/usr/bin/python", pwd+'/'+scriptName, arg1, arg2); 
Process p = pb.start(); 
Powiązane problemy