12

示例代码:

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

如何在上述命令中指定 JAVA_OPTS?当我使用上述命令时,我得到一个'java.lang.OutOfMemoryError:无法创建新的本机线程',我认为在命令中指定 JAVA_OPTS 可以解决问题。

我确实在 .bashrc 文件中指定了 JAVA_OPTS,但它没有任何效果。

4

2 回答 2

14

你可以这样做,但是在文档中找到如何做到这一点是一种疯狂的追逐。

subprocess.call()文件说,

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)
于 2013-02-08T00:31:52.713 回答
7

无需使用 JAVA_OPTS - 只需将更多参数传递给call(). 例如:

import subprocess
subprocess.call(['java', '-jar', 'temp.jar', '-Xmx1024m', '-Xms256m'])
于 2013-02-07T22:42:07.883 回答