V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
SKYNE
V2EX  ›  Python

Python 脚本通过 SSH 设置 Linux 环境变量???

  •  
  •   SKYNE ·
    SKYNE0 · 2018-08-02 09:07:01 +08:00 · 3589 次点击
    这是一个创建于 2287 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自己最近使用 Python 写 Oracle,WebLogic 等自动化安装脚本。

    自己还不会 Shell 编程,所以使用了 Python, 以后学了 Shell 编程,再使用 Shell 重写。

    有一个问题是使用 subprocess.call(['source /etc/profile'], shell=True)

    类似这样的命令可以被执行,但不会生效,$PATH 并不改变。

    上网查了几篇文章,说 SSH 连接的终端并不是实际意义上的 bash

    目前可以使用某个命令的绝对地址,但这样有点麻烦,有些地址很长,强迫症都犯了。

    有没有人做过类似的东西,有没有更好的方法,请大佬指教一二。

    11 条回复    2018-08-02 13:09:09 +08:00
    hanxiV2EX
        1
    hanxiV2EX  
       2018-08-02 09:16:24 +08:00 via Android
    每次 subprocess.call 都是单独的环境吧,你把所有命令拼成一行。只调用一次 subprocess.call
    leido
        2
    leido  
       2018-08-02 09:19:29 +08:00
    二楼正解
    narakus
        3
    narakus  
       2018-08-02 09:21:00 +08:00
    subprocess.call 会生成一个子 shell 来执行,直接完成后就退出了,你环境变量设置到子 shell 的环境变量里面去了
    xiaket
        4
    xiaket  
       2018-08-02 09:25:45 +08:00
    subproces 的 env 设 PATH
    wweir
        5
    wweir  
       2018-08-02 09:26:55 +08:00 via Android
    ssh 连接的时候是可以选择传递制定的环境变量的,不过不知道 python 的封装有没有暴露相应的配置项。
    另外环境变量是在父子进程之间传递的,你一个 subprocess 执行完就退出自然啥都不剩。
    并且 source 是 shell 内置命令,必须在 shell 中执行。

    如果想要用你的方式实现的话,需要这么干

    bash -c 'source xxx; ls'
    Ansen
        6
    Ansen  
       2018-08-02 09:32:42 +08:00
    env = 'xxxxx'
    subprocess.Popen(RUN_COMMAND, env = env, shell=True)
    deepreader
        7
    deepreader  
       2018-08-02 09:49:34 +08:00
    SKYNE
        8
    SKYNE  
    OP
       2018-08-02 09:52:43 +08:00
    @hanxiV2EX @narakus@wweir@Ansen@xiaket@leido 原来是这样,我马上去试试,多谢多谢。/手动感谢
    SKYNE
        9
    SKYNE  
    OP
       2018-08-02 10:00:18 +08:00
    @deepreader 好的,非常感谢
    d0m2o08
        10
    d0m2o08  
       2018-08-02 10:41:47 +08:00
    楼主为什么不用 ansible 试试
    SKYNE
        11
    SKYNE  
    OP
       2018-08-02 13:09:09 +08:00
    @d0m2o08 某司小小实习生,负责人是让我用 Python 来写。/手动无奈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3375 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:31 · PVG 19:31 · LAX 03:31 · JFK 06:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.