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'}が上書きされ、他のものが壊れる可能性があります。したがって、次のようなコードを使用して、現在のプロセスで設定せずに、新しいプロセス実行用の環境変数を追加することをお勧めします。CLASSPATHJAVA_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 に答える