2011-08-02 20 views
2

サブプロセスや余分な引数

args = 'LD_LIBRARY_PATH=/opt/java/jre/lib/i386/:/opt/java/jre/lib/amd64/ exec /opt/java/jre/bin/java -Xincgc -Xmx1G -jar craftbukkit-0.0.1-SNAPSHOT.jar'.split() 
p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

は、しかし、私が受け取る結果は次のとおりです。LD_LIBRARY_PATH部分なし

Traceback (most recent call last): 
File "launch.py", line 29, in <module> 
p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ errread, errwrite) 
File "/usr/lib/python2.7/subprocess.py", line 1228, in _execute_child raise child_exception 
OSError: [Errno 2] No such file or directory 

、それが正常に動作します。しかし、私はそれが必要です。助けてくれてありがとう。 Popenコールにshell = Trueを追加

答えて

2

ここでシェルを使用して回避する方法です。

from subprocess import Popen 
from os import environ 

env = dict(os.environ) 
env['LD_LIBRARY_PATH'] = '/opt/java/jre/lib/i386/:/opt/java/jre/lib/amd64/' 
args = ['/opt/java/jre/bin/java', '-Xincgc', '-Xmx1G', '-jar', 'craftbukkit-0.0.1-SNAPSHOT.jar'] 
p = Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) 
7

試してみてください。それはシェルを介してコマンドを実行するために必要ですので

p = subprocess.Popen(args, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

あなたがLD_LIBRARY_PATHを設定するために使用している構文は、シェルの構文です。

+0

私は実際にそれを試してみましたが、私は次のうちの何を取得:dbdii407 @ p.stderr.readlineを() – dbdii407

+0

:私は、それは別のことだと思います問題。別の質問を投稿してみませんか? – NPE

+0

オリジナルがまだ解決されていないときに別の質問を作成するのはなぜですか? ;) – dbdii407

関連する問題