设置root中程序可访问的环境变量

时间:2014-04-08 03:15:43

标签: python linux unix environment-variables raspberry-pi

我遇到一个问题,我的程序在以root身份运行时没有找到环境变量。我目前有程序做:

    #!/usr/bin/python3
    from i2clibraries import i2c_adxl345
    #various other imports

    euid=os.geteuid()
    if euid != 0:
        args=['sudo',sys.executable]+sys.argv+[os.environ]
        os.execlpe('sudo',*args)

    #rest of program

除环境变量外,必要的文件位于此程序所在的目录/ home / pi / project-test

如果该程序以root用户身份重新启动,如何设置该程序可以访问的环境变量?他们是:

    export QUICK2WIRE_API_HOME=~/project-test/quick2wire-python-api
    export PYTHONPATH=$PYTHONPATH:$QUICK2WIRE_API_HOME

在我的程序目录中执行这些导出时,以用户(pi)运行而不是root用户运行时修复它。我可以修复上面的QUICK2WIRE_API_HOME位置,还是需要将我的所有库和程序加载到另一个位置?

注意:替换'sudo -E'或'sudo -E su'in并不包含我预期设置的环境变量。顺便说一句,收到的实际错误是:

    ImportError: No module named quick2wire.i2c 

这是环境变量设置路径的内容。此外,它必须以root身份运行,因为某些程序访问GPIO并在用户(pi)返回时运行:

    RuntimeError: No access to /dev/mem

我也玩弄过使用多处理或线程分解它的想法,但目前两者都远远超过我的头脑,以了解我需要包含什么以及在哪里设置函数,args等。

可以找到完整的程序here.

更新:我通过Thinkbowl将所有相关文件重新载入/ root。仍然不想接受位于/ root中的quick2wire库。目前/ root看起来像:

    .              .config         .gvfs        quick2wire-python-api
    ..             .dbus           i2clibraries .Xauthority
    .bash_history  .Desktop        .idlerc      .xsession-errors
    .bashrc        .gpio.sh        .local
    .cache         .gstreamer-0.10 .profile

i2c *和.quick *是从thinkbowl下载的两个库。当我表演时:

    env | grep quick2wire

in / root我得到:

    OLDPWD=/root/quick2wire-python-api
    QUICK2WIRE_API_HOME=/root/quick2wire-python-api
    PYTHON=$PYTHONPATH:$QUICK2WIRE_API_HOME:/root/quick2wire-python-api

0 个答案:

没有答案