Python 子进程和额外参数
我正在尝试使用以下代码:Python 子进程和额外参数,python,subprocess,Python,Subprocess,我正在尝试使用以下代码: 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, st
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)
然而,我得到的结果是:
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
回溯(最近一次呼叫最后一次):
文件“launch.py”,第29行,在
p=subprocess.Popen(args,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
文件“/usr/lib/python2.7/subprocess.py”,第679行,在_uinit__;errread,errwrite中)
文件“/usr/lib/python2.7/subprocess.py”,第1228行,在“执行”子进程“引发子进程”异常中
OSError:[Errno 2]没有这样的文件或目录
如果没有LD_LIBRARY_PATH部分,它可以正常工作。然而,我需要它。感谢您的帮助。尝试将
shell=True
添加到Popen
呼叫:
p = subprocess.Popen(args, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
用于设置
LD\u LIBRARY\u 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)
我确实试过了,但从以下内容中我什么也没有得到:p.stderr.readline()@dbdii407:我认为这是另一个问题。为什么不单独发布一个问题?为什么在原始问题尚未解决的情况下创建另一个问题?;)