1

次のコード スニペット (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()
4

2 に答える 2

1

source ~/.bashrcPythonスクリプトを開始する前に配置して、環境変数を設定できます。

于 2012-06-04T17:40:19.920 に答える