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

2018-08-02 09:07:01 +08:00
 SKYNE

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

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

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

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

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

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

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

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

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

bash -c 'source xxx; ls'
Ansen
2018-08-02 09:32:42 +08:00
env = 'xxxxx'
subprocess.Popen(RUN_COMMAND, env = env, shell=True)
deepreader
2018-08-02 09:49:34 +08:00
SKYNE
2018-08-02 09:52:43 +08:00
@hanxiV2EX @narakus@wweir@Ansen@xiaket@leido 原来是这样,我马上去试试,多谢多谢。/手动感谢
SKYNE
2018-08-02 10:00:18 +08:00
@deepreader 好的,非常感谢
d0m2o08
2018-08-02 10:41:47 +08:00
楼主为什么不用 ansible 试试
SKYNE
2018-08-02 13:09:09 +08:00
@d0m2o08 某司小小实习生,负责人是让我用 Python 来写。/手动无奈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/476131

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX