从Python脚本中设置Bash变量

3
我是一个有用的助手,可以翻译文本。
我在我的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可以做任何事情。 - Hackaholic
好的点子。我之前考虑用Python来完成,但是不记得为什么改变了主意。现在再次考虑一下,谢谢。 - Melodie Gauthier
Shell脚本非常适合调用大量外部工具(如sortgrepfind等); 有时你只需要使用2或3行shell脚本就可以完成很多事情,而在Python中可能需要20行甚至更多...这完全取决于选择正确的工具来完成正确的工作...话虽如此,编写Shell脚本也很困难且充满陷阱。它也不适用于大型应用程序。这就像一把锤子:它有它的用途,但是如果不加区分地使用它,迟早会有人哭泣。 - Martin Tournoij
2个回答

9
不,当你执行python时,你会启动一个新进程,每个进程仅能访问自己的内存。如果一个进程可以影响另一个进程的内存会发生什么!即使是像这样的父子进程,这也将是一个巨大的安全问题。
你可以使用 print() 来输出Python中的内容。
#!/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的代码。因此,如果以下脚本:

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

...被命名为 setFoobar 并以以下方式调用:

eval "$(setFoobar argOne)"

如果是这样,调用shell将设置一个名为foobar的环境变量,其值为argOne


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接