示例代码:
import subprocess
subprocess.call(['java', '-jar', 'temp.jar'])
如何在上述命令中指定 JAVA_OPTS?当我使用上述命令时,我得到一个'java.lang.OutOfMemoryError:无法创建新的本机线程',我认为在命令中指定 JAVA_OPTS 可以解决问题。
我确实在 .bashrc 文件中指定了 JAVA_OPTS,但它没有任何效果。
你可以这样做,但是在文档中找到如何做到这一点是一种疯狂的追逐。
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
上面显示的参数只是最常见的参数,下面在常用参数中进行了描述(因此缩写签名中的符号有点奇怪)。
然后“常用参数”部分在描述了一堆其他参数后在最后说:
这些选项以及所有其他选项在
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)
无需使用 JAVA_OPTS - 只需将更多参数传递给call()
. 例如:
import subprocess
subprocess.call(['java', '-jar', 'temp.jar', '-Xmx1024m', '-Xms256m'])