免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 15302 | 回复: 5
打印 上一主题 下一主题

关于在python中设置shell PATH环境变量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-24 10:24 |只看该作者 |倒序浏览
本帖最后由 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写成上面这样实在觉得有些别扭,不知道有没有更简洁的实现方法?

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2013-09-24 11:07 |只看该作者
就是格式化字符串吧
2.5版本以前的一种方法:

  1. >>> TOOLBAR = '/data'
  2. >>> PATH = '%(TOOLBAR)s/a/b/c %(TOOLBAR)s/x/y/z' % {'TOOLBAR': TOOLBAR}
  3. >>> print PATH
  4. /data/a/b/c /data/x/y/z
复制代码
2.5版本以后的一种方法:
  1. >>> '{0}/a/b/c {0}/x/y/z'.format(TOOLBAR)
  2. '/data/a/b/c /data/x/y/z'
  3. >>> '{TOOLBAR}/a/b/c {TOOLBAR}/x/y/z'.format(TOOLBAR=TOOLBAR)
  4. '/data/a/b/c /data/x/y/z'
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-09-24 17:47 |只看该作者
timespace 发表于 2013-09-24 11:07
就是格式化字符串吧
2.5版本以前的一种方法:2.5版本以后的一种方法:


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

论坛徽章:
0
4 [报告]
发表于 2013-09-24 18:01 |只看该作者
回复 2# timespace

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

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


   

论坛徽章:
0
5 [报告]
发表于 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将来能实现这样的用法就好了:)


论坛徽章:
0
6 [报告]
发表于 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***'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP