您可以这样做,但在文档中查找如何进行操作有点费力。
subprocess.call() documentation 说,
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
上面显示的参数只是最常见的参数,下面在Frequently Used Arguments 中进行了描述(因此缩写签名中的符号有点奇怪)。
然后Frequently Used Arguments 部分在描述了一堆其他论点后在最后说:
Popen 构造函数文档中更详细地描述了这些选项以及所有其他选项。
那好吧! Popen 文档给出了完整的签名:
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 是你想要的!但是,如果您只传递env={'JAVA_OPTS': 'foo'},那么它将覆盖所有 环境变量,包括像CLASSPATH 这样的东西,这可能会破坏其他东西。所以你可能想使用这样的代码为新进程执行添加一个JAVA_OPTS环境变量,而不是在当前进程中设置它:
#!/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)