2013-02-07 7 views
8

Przykładowy kod:wywołanie podproces w Pythonie do wywoływania plików java jar z JAVA_OPTS

import subprocess 
subprocess.call(['java', '-jar', 'temp.jar']) 

Jak określić JAVA_OPTS w powyższym poleceniu? Otrzymuję "java.lang.OutOfMemoryError: niezdolny do utworzenia nowego wątku natywnego", gdy używam powyższego polecenia i myślę, że określenie JAVA_OPTS w komendzie rozwiązałoby problem.

Zrobiłem określić JAVA_OPTS w pliku .bashrc i nie miał wpływu.

+0

Twój problem nie robi wydaje się być związane z python. Ponieważ wykonuje twoje polecenie. – Greg

Odpowiedz

11

Możesz to zrobić, ale znalezienie sposobu, w jaki można to zrobić w dokumentacji, to rodzaj gonitwy.

subprocess.call() documentation mówi

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False) The arguments shown above are merely the most common ones, described below in Frequently Used Arguments (hence the slightly odd notation in the abbreviated signature).

Następnie sekcja Frequently Used Arguments mówi, na samym końcu po opisaniu kilka innych argumentów:

These options, along with all of the other options, are described in more detail in the Popen constructor documentation.

Dobrze więc! Dokumentacja Popen daje pełny podpis:

class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

env jest jeden chcesz! Jeśli jednak po prostu zdasz env={'JAVA_OPTS': 'foo'}, to zastąpi wszystkich zmiennych środowiskowych, w tym rzeczy takie jak CLASSPATH, które mogą złamać inne rzeczy. Więc prawdopodobnie chcesz użyć kodu tak, aby dodać zmienną JAVA_OPTS środowisko dla nowego procesu realizacji, bez ustawiania go w obecnym procesie:

#!/usr/bin/env python2.7 

import os 
import subprocess 

# Make a copy of the environment  
env = dict(os.environ) 
env['JAVA_OPTS'] = 'foo' 
subprocess.call(['java', '-jar', 'temp.jar'], env=env) 
+0

Dziękuję bardzo – user1164061

6

Nie ma potrzeby używania JAVA_OPTS - wystarczy przekazać kilka dodatkowych argumentów do call(). Na przykład:

import subprocess 
subprocess.call(['java', '-jar', 'temp.jar', '-Xmx1024m', '-Xms256m']) 
+0

Dziękuję bardzo za wskazówkę – user1164061

Powiązane problemy