自己最近使用 Python 写 Oracle,WebLogic 等自动化安装脚本。
自己还不会 Shell 编程,所以使用了 Python, 以后学了 Shell 编程,再使用 Shell 重写。
有一个问题是使用 subprocess.call(['source /etc/profile'], shell=True)
类似这样的命令可以被执行,但不会生效,$PATH 并不改变。
上网查了几篇文章,说 SSH 连接的终端并不是实际意义上的 bash
目前可以使用某个命令的绝对地址,但这样有点麻烦,有些地址很长,强迫症都犯了。
有没有人做过类似的东西,有没有更好的方法,请大佬指教一二。
![]() | 每次 subprocess.call 都是单独的环境吧,你把所有命令拼成一行。只调用一次 subprocess.call |
![]() | 2 leido 2018-08-02 09:19:29 +08:00 二楼正解 |
3 narakus 2018-08-02 09:21:00 +08:00 subprocess.call 会生成一个子 shell 来执行,直接完成后就退出了,你环境变量设置到子 shell 的环境变量里面去了 |
![]() | 4 xiaket 2018-08-02 09:25:45 +08:00 subproces 的 env 设 PATH |
![]() | 5 wweir 2018-08-02 09:26:55 +08:00 via Android ssh 连接的时候是可以选择传递制定的环境变量的,不过不知道 python 的封装有没有暴露相应的配置项。 另外环境变量是在父子进程之间传递的,你一个 subprocess 执行完就退出自然啥都不剩。 并且 source 是 shell 内置命令,必须在 shell 中执行。 如果想要用你的方式实现的话,需要这么干 bash -c 'source xxx; ls' |
![]() | 6 Ansen 2018-08-02 09:32:42 +08:00 env = 'xxxxx' subprocess.Popen(RUN_COMMAND, env = env, shell=True) |
![]() | 7 deepreader 2018-08-02 09:49:34 +08:00 |
8 SKYNE OP |
9 SKYNE OP @deepreader 好的,非常感谢 |
![]() | 10 d0m2o08 2018-08-02 10:41:47 +08:00 楼主为什么不用 ansible 试试 |