【问题标题】:how to execute shell script in the same process in python [closed]如何在python的同一进程中执行shell脚本[关闭]
【发布时间】:2015-04-14 15:35:17
【问题描述】:

我需要用python执行几个shell脚本,有些脚本会导出环境参数,所以需要在同一个进程中执行,否则其他脚本看不到新的环境参数

一句话,我要让shell脚本改变python进程的环境 所以我不应该使用子进程,知道如何实现吗?

【问题讨论】:

  • 这很简单:你不能。 (除非你在 Python 中实现了一个 shell 脚本解释器。)
  • 我猜是这样,只是想再次确认

标签: python shell


【解决方案1】:

如果您制作一个“主”shell 脚本来按顺序执行所有其他脚本会怎样?这样,您只需自己创建一个子流程,各个脚本将共享相同的环境。

但是,如果您希望将脚本执行与 Python 代码交错,那么您可能必须让每个脚本在退出之前将其环境回显到标准输出,对其进行解析,然后将其传递给下一个脚本(子进程.Popen() 接受 env 参数,这是一个地图。)

【讨论】:

  • 感谢您的快速响应,如果我想让脚本能够更改 python 环境怎么办?有什么方法可以实现吗?
  • 然后,再次,您可能希望脚本将它们当前的环境变量回显到标准输出,在 Python 中解析输出,并将变量添加到 os.environ 映射.
  • 是的,这可能是一个解决方案,谢谢
【解决方案2】:

不,您不能同时在同一个进程中运行多个程序(bash、python)。

但是您可以使用 bash 中的 exec 或 python 中的 exec 命令之一按顺序运行它们,例如 os.execve。有几件事在“执行边界”中幸存下来,其中之一是环境块。所以在每个 bash 脚本中你 exec 下一个,最后是 exec 你的 python。

您也可以考虑使用命名管道等 IPC 机制在进程之间传递数据。

我恭敬地建议您再次查看您的设计。为什么要混合 bash 和 python?只是为了重用代码吗?即使你做到了这一点,你也会以一团糟而告终。坚持使用一种语言通常更容易。

【讨论】:

  • 谢谢,这个工具是用python写的,但是我想让用户能够使用shell
  • @Jan:好的,所以你应该使用 IPC 机制。底线是你现在不能在 python 中嵌入 bash。也许你应该将你的用户升级到 python :-)
猜你喜欢
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多