alinunix 发表于 2013-09-24 10:24

关于在python中设置shell PATH环境变量

本帖最后由 alinunix 于 2013-09-24 10:27 编辑

想把一个c shell脚本转换成python脚本,关于在python中设置shell PATH环境变量,我是按下面的方法设的,感觉写得非常麻烦,特别是c shell脚本比较长的时候,转换起来觉得很费劲,请教高手有没有更好的实现方法?

c shell:
setenv TOOLDIR "/dirname/a/b/c/tools"
set path = ( $TOOLDIR/a/bin $TOOLDIR/b/bin $TOOLDIR/c/bin $TOOLDIR/d/bin $TOOLDIR/e/bin $TOOLDIR/f/bin $path)

=>

Python script:
import os
os.environ['TOOLDIR'] = '/dirname/a/b/c/tools'
TOOLDIR = os.getenv('TOOLDIR')
os.environ['PATH'] = TOOLDIR + '/a/bin' + :' \
                        + TOOLDIR + '/b/bin' + :' \
                        + TOOLDIR + '/c/bin' + :' \
                        + TOOLDIR + '/d/bin' + :' \
                        + TOOLDIR + '/e/bin' + :' \
                        + TOOLDIR + '/f/bin' + :' \
                        + os.environ['PATH']

Python没有Perl的变量插值,连接字符串好像只能用“+”,这个path写成上面这样实在觉得有些别扭,不知道有没有更简洁的实现方法?

timespace 发表于 2013-09-24 11:07

就是格式化字符串吧
2.5版本以前的一种方法:
>>> TOOLBAR = '/data'
>>> PATH = '%(TOOLBAR)s/a/b/c %(TOOLBAR)s/x/y/z' % {'TOOLBAR': TOOLBAR}
>>> print PATH
/data/a/b/c /data/x/y/z2.5版本以后的一种方法:>>> '{0}/a/b/c {0}/x/y/z'.format(TOOLBAR)
'/data/a/b/c /data/x/y/z'
>>> '{TOOLBAR}/a/b/c {TOOLBAR}/x/y/z'.format(TOOLBAR=TOOLBAR)
'/data/a/b/c /data/x/y/z'

alinunix 发表于 2013-09-24 17:47

timespace 发表于 2013-09-24 11:07 static/image/common/back.gif
就是格式化字符串吧
2.5版本以前的一种方法:2.5版本以后的一种方法:

timespace兄,这个果然好多了,非常感谢!

alinunix 发表于 2013-09-24 18:01

回复 2# timespace

timespace兄,这个能否也麻烦你帮我看下?多谢啦!

http://bbs.chinaunix.net/thread-4099778-1-1.html


   

alinunix 发表于 2013-09-27 15:34

本帖最后由 alinunix 于 2013-09-27 15:38 编辑

2.4以后还有下面这个用法,对于用惯了$符号的人,可能是看了最顺眼的了。

#!/usr/bin/env python
import string

TOOLBAR = '/data'
PATH = string.Template('$TOOLBAR/a/b/c $TOOLBAR/x/y/z').substitute(vars())

print PATH

输出:/data/a/b/c /data/x/y/z

这个是最接近Perl的变量插值了,不过还是麻烦啊,直接写成(“$TOOLBAR/a/b/c $TOOLBAR/x/y/z”)多简单啊。

Python Cookbook(3rd) 里提到:

Discussion
The lack of true variable interpolation in Python has led to a variety of solutions over
the years.

可见变量插值用得很多的,很多人都会碰到这个问题,Python里单引号、双引号功能是一样的,为什么不把双引号用来做变量插值呢,这样不是方便多了吗?Python将来能实现这样的用法就好了:)


zhaoshun1227 发表于 2016-08-28 15:13

#! /usr/bin/env python
# coding:utf-8

import ctypes, os

print os.getenv('LD_LIBRARY_PATH')

os.environ['LD_LIBRARY_PATH'] = \
    ':'.join(("/root/code/java/bigdata/postdeal/Debug/",
            "/root/code/java/bigdata/logdel/Debug",
            "/root/code/java/bigdata/Readfile",
            os.getenv('LD_LIBRARY_PATH'),))

print os.getenv('LD_LIBRARY_PATH')

ll = ctypes.cdll.LoadLibrary
lib = ll("libpycall.so")
print lib.foo(1, 3)
print '***finish***'
页: [1]
查看完整版本: 关于在python中设置shell PATH环境变量