从python脚本设置bash变量

时间:2014-11-05 21:33:46

标签: python linux bash

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

示例:

我的bash脚本:

#!/bin/bash

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

我的python脚本:

anotherVar="HelloWorld"

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

2 个答案:

答案 0 :(得分:6)

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

你可以创建python print()并使用它,但是:

#!/usr/bin/env python3

print('Hello!')

在你的shell脚本中:

#!/usr/bin/env bash

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

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

答案 1 :(得分:0)

Python 3中的

shlex.quote()或Python 2中的pipes.quote()可用于生成可被调用shell eval进行编码的代码。因此,如果使用以下脚本:

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

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

eval "$(setFoobar argOne)"

...然后,调用方外壳将设置一个名为foobar且值为argOne的环境变量。