我正在尝试使用以下代码:
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)
Run Code Online (Sandbox Code Playgroud)
但是,我收到的结果是:
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
Run Code Online (Sandbox Code Playgroud)
如果没有LD_LIBRARY_PATH部分,它可以正常工作.但是,我需要它.谢谢你的帮助.
尝试添加shell = True
到Popen
通话中:
p = subprocess.Popen(args, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)
您用来设置LD_LIBRARY_PATH
的语法是shell语法,因此必须通过shell执行命令.
这是避免使用 shell 的方法:
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5723 次 |
最近记录: |