zoukankan      html  css  js  c++  java
  • python在shell中环境变量使用

    1、用Python Shell设置或获取环境变量的方法:
    
    设置系统环境变量
    
    os.environ['环境变量名称']='环境变量值' #其中key和value均为string类型
    
    os.putenv('环境变量名称', '环境变量值')
    
    获取系统环境变量
    
    os.environ['环境变量名称']
    
    os.getenv('环境变量名称')
    
    
    
    实例一、
    
    In [52]: output=subprocess.check_output(["head -c 16 /dev/urandom | od -An -t x | tr -d ' '"], shell=True)                           
    
    In [53]: print(output)                                                                                                               
    b'3512c668547cd983cb48ccf05b0ccedf
    '
    
    In [67]: output.strip()                                                                                                              
    Out[67]: b'3512c668547cd983cb48ccf05b0ccedf'
    
    In [72]: output.strip().strip('b')                                                                                                   
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-72-d12ac1d7dec8> in <module>
    ----> 1 output.strip().strip('b')
    
    TypeError: a bytes-like object is required, not 'str'
    
    
    In [73]: os.environ["token"]=str(output.strip()).strip('b')                                                                          
    
    In [74]: os.getenv["token"]                                                                                                         
    Out[74]: "'3512c668547cd983cb48ccf05b0ccedf'"
    
    
    
    实例二、
    
    os.environ["user"]="jenkins"
    
    os.getenv["user"]
    
    'jenkins'
    
     
    
    os.path.expanduser(path)                            把path中包含的”~”和”~user”转换成用户目录
    
    实例三、
    
    os.path.expanduser("~")
    
    '/home/mysql'
    
     
    
    os.path.expandvars(path)                      根据环境变量的值替换path中包含的”$name”和”${name}”
    
    实例四、
    
    os.environ["user"]="jenkins"
    
    os.path.expandvars("$user/mysql")
    
    'jenkins/mysql'
     
     
    
    2、对文件内容中定义的变量替换成真实的值
    
    特别注意:原文件必须是 python文件,否则不能替换,
    
    如果想要修改文件中的某一行或者某一个位置的内容,在python中是没有办法直接实现的,只能先把文件所有的内容全部读取出来,然后进行匹配修改后写入到新的文件中。
    
    
    例如想要把文件中的变量替换为真实的值需要进行如下操作:
    
    查看原文件内容
    
    注意:下面TOKEN不能写成$TOKEN , 写入后查看文件会变成空格
    
    cat > /k8s/profile/token.py << EOF
    TOKEN,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
    EOF
    
    
    定义变量
    
    In [7]: output=subprocess.check_output(["head -c 16 /dev/urandom | od -An -t x | tr -d ' '"], shell=True)                            
    
    In [9]: token=str(output.decode('utf8').strip()).strip('b')                                                                          
    
    In [10]: print(token)                                                                                                                
    d3f4e95e05dfe34ea87217a55fb75bac
    
    
    开始替换
    
    In [3]: os.chdir('/etc/kubernetes/')                                                                                                 
    
    In [4]: if os.path.exists('token.csv'): 
       ...:         os.remove('token.csv') 
    
    
    In [56]: f = open('/k8s/profile/token.py','r',encoding='utf-8')
    
    In [57]: f_new = open('/etc/kubernetes/token.csv','w',encoding='utf-8')
    
    In [58]: for line in f:
        ...:     if "TOKEN" in line:
        ...:         line = line.replace('TOKEN',token)
        ...:     f_new.write(line)
        ...: f.close()
        ...: f_new.close()
    
    
    
    
    3、替换文件中的主机名、ip 变量
    
    cat > hostname_ip_py << EOF
    #!/usr/bin/python
    # -*- codinig: utf-8 -*-
    
    from __future__ import print_function
    import os, sys, stat
    import shutil
    import tarfile
    import subprocess
    
    # 定义环境变量
    
    # 定义主机名
    NODE_NAME = subprocess.check_output(["hostname"], shell=True)
    NODE_NAME = str(NODE_NAME.decode('utf8').strip()).strip('b')
    
    # 定义主机ip
    NODE_IP = subprocess.check_output(["hostname -i | awk '{print $NF}'"], shell=True)
    NODE_IP = str(NODE_IP.decode('utf8').strip()).strip('b')
    
    ETCD_NODES = "test1=https://192.168.0.91:2380,test2=https://192.168.0.92:2380,test3=https://192.168.0.93:2380"
    
    # 创建 etcd.service文件
    f = open('/k8s/profile/etcd.service.template.py', 'r', encoding='utf-8')
    f_new = open('/etc/systemd/system/etcd.service', 'w', encoding='utf-8')
    for line in f:
        if "NODE_NAME" in line:
            line = line.replace('NODE_NAME', NODE_NAME)
        elif "NODE_IP" in line:
            line = line.replace('NODE_IP', NODE_IP)
        elif "ETCD_NODES" in line:
            line = line.replace('ETCD_NODES', ETCD_NODES)
        f_new.write(line)
    print("替换完成")
    f.close()
    f_new.close()
    EOF
    
    
    
    
    
     
     
  • 相关阅读:
    Redis安装(源码安装)
    为 Blade 模板引擎添加新文件扩展名
    使用国内镜像composer安装laravel
    从github上下载项目到eclipse
    js中使用Java的方式
    File类中的list()和listFiles()方法
    与文件上传到的三个类:FileItem类、ServletFileUpload 类、DiskFileItemFactory类
    DiskFileItemFactory类
    如何获取.properties配置文件
    Linux、Windows中的相对路径和绝对路径
  • 原文地址:https://www.cnblogs.com/effortsing/p/10346224.html
Copyright © 2011-2022 走看看