所以,在Rokm的帮助下,我终于解决了这个问题。上面的警告消息没有引起任何问题,但这是由于环境变量未传递给子流程造成的。
为了解决这个问题,我简单地做了以下事情:
env = dict(os.environ)
lp_key = 'LD_LIBRARY_PATH'
lp_orig = env.get(lp_key + '_ORIG')
if lp_orig is not None:
env[lp_key] = lp_orig
else:
env.pop(lp_key, None)
接下来,将env变量添加到子进程Popen命令中。这是完整的代码供参考。这段代码将为您提供命令的输出,并返回命令的退出代码。此外,您不必使用任何shelix或任何其他东西来运行它,简单的.strip()命令将为您完成。希望你们觉得它有用,享受吧!!
from subprocess import Popen,PIPE,STDOUT
env = dict(os.environ)
lp_key = 'LD_LIBRARY_PATH'
lp_orig = env.get(lp_key + '_ORIG')
if lp_orig is not None:
env[lp_key] = lp_orig
else:
env.pop(lp_key, None)
cmd = raw_input('Enter your command:')
out = Popen(cmd.split(),stderr=STDOUT,stdout=PIPE, env=env)
t, y = out.communicate()[0],out.returncode
print('output : ' + str(t))
print ('Return Code : ' + str(y))
P.S.不幸的是,cmd.split()在某些情况下会失败,即当参数有空格时,如cmd='/usr/bin/ls“/home/user/my directory”',cmd.split()会失败。在这种情况下,cmd=shlex.split(cmd,posix=True)会更好地工作。但是shlex.split()在捕获stdout时会失败,因此没有更全面的解决方案