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)
Twój problem nie robi wydaje się być związane z python. Ponieważ wykonuje twoje polecenie. – Greg