在下面的代码片段(打算在 init.d 环境中工作)中,我想执行 test.ClassPath。但是,我在设置和传递用户的 .bashrc 中定义的 CLASSPATH 环境变量时遇到了问题。
这是我沮丧的根源:
- 当以下脚本在使用模式下运行时,它会打印出 CLASSPATH OK(来自 $HOME/.bashrc)
- 当我以 root 身份运行它时,它也显示 CLASSPATH 正常(我已经使用 CLASSPATH 设置了 /etc/bash.bashrc)
- 但是当我执行“sudo script.py”(模拟 init.d 启动时发生的情况)时,缺少 CLASSPATH !
CLASSPATH 非常大,所以我想从文件中读取它.. 比如说 $HOME/.classpath
#!/usr/bin/python
import subprocess
import os.path as osp
import os
user = "USERNAME"
logDir = "/home/USERNAME/temp/"
print os.environ["HOME"]
if "CLASSPATH" in os.environ:
print os.environ["CLASSPATH"]
else:
print "Missing CLASSPATH"
procLog = open(osp.join(logDir, 'test.log'), 'w')
cmdStr = 'sudo -u %s -i java test.ClassPath'%(user, ) # run in user
proc = subprocess.Popen(cmdStr, shell=True, bufsize=0, stderr=procLog, stdout=procLog)
procLog.close()