python 中的子进程调用以使用 JAVA_OPTS 调用 java jar 文件

2024-05-13

示例代码:

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

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

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


您可以执行此操作,但在文档中查找如何执行此操作有点像白费力气。

The subprocess.call()文档 http://docs.python.org/2/library/subprocess.html#subprocess.call says,

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)上面显示的参数只是最常见的参数,如下所述常用参数 http://docs.python.org/2/library/subprocess.html#frequently-used-arguments(因此缩写签名中的符号有点奇怪)。

然后常用参数 http://docs.python.org/2/library/subprocess.html#frequently-used-arguments在描述了一堆其他论点后,最后一节说:

这些选项以及所有其他选项在Popen http://docs.python.org/2/library/subprocess.html#subprocess.Popen构造函数文档。

好吧!这Popen http://docs.python.org/2/library/subprocess.html#subprocess.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'},那么这将覆盖all环境变量,包括诸如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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 中的子进程调用以使用 JAVA_OPTS 调用 java jar 文件 的相关文章

随机推荐