【问题标题】:set bash variable from python script从 python 脚本设置 bash 变量
【发布时间】:2014-11-05 21:33:46
【问题描述】:

我在我的 bash 脚本中调用了一个 python 脚本,我想知道是否有一种简单的方法可以在我的 python 脚本中设置我的 bash 变量。

例子:

我的 bash 脚本:

#!/bin/bash

someVar=""
python3 /some/folder/pythonScript.py

我的python脚本:

anotherVar="HelloWorld"

有没有办法可以将我的 someVar 设置为 anotherVar 的值?我正在考虑在 python 脚本内的文件中打印属性,然后从我的 bash 脚本中读取它们,但也许还有另一种方法。另外我不知道也不认为这有什么区别,但我可以用相同的名称命名两个变量(someVar/someVar 而不是 someVar/anotherVar)

【问题讨论】:

  • 为什么要使用 bash ,如果 python 可以做任何事情
  • 好话。我当时正在考虑用 python 做这件事,但不记得为什么我改变主意了。重新考虑谢谢
  • Shell 脚本很好,因为您调用了很多外部实用程序(如sortgrepfind 等);有时您只需 2 或 3 行 shell 脚本就可以完成很多,而这在 Python 中可能需要 20 行或更多行......这一切都取决于正确的工具来完成正确的工作......说,shell 脚本很难且充满陷阱。它也不能很好地扩展到更大的应用程序。它就像一把锤子:它有它的用途,但乱用它,有人迟早会哭。

标签: python linux bash


【解决方案1】:

不,当您执行python 时,您会启动一个新进程,并且每个进程只能访问自己的内存。想象一下如果一个进程可以影响另一个进程的内存会发生什么!即使对于这样的父/子进程,这也是一个巨大的安全问题。

不过,您可以制作 python print() 并使用它:

#!/usr/bin/env python3

print('Hello!')

在你的 shell 脚本中:

#!/usr/bin/env bash

someVar=$(python3 myscript.py)
echo "$someVar"

当然,您可以使用许多其他 IPC 技术,例如套接字、管道、共享内存等……但如果没有上下文,很难做出具体的建议。

【讨论】:

    【解决方案2】:

    Python 3 中的shlex.quote() 或Python 2 中的pipes.quote() 可用于生成可由调用shell evaled 的代码。因此,如果以下脚本:

    #!/usr/bin/env python3
    import sys, shlex
    print('export foobar=%s' % (shlex.quote(sys.argv[1].upper())))
    

    ...被命名为setFoobar 并调用为:

    eval "$(setFoobar argOne)"
    

    ...那么调用shell 将设置一个名为foobar 和值argOne 的环境变量。

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 2011-03-05
      • 2013-10-26
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 2018-10-24
      相关资源
      最近更新 更多