我在我的bash脚本中调用了一个python脚本,我想知道是否有一种简单的方法可以在我的python脚本中设置我的bash变量。
示例:
我的bash脚本:
#!/bin/bash
someVar=""
python3 /some/folder/pythonScript.py
我的python脚本:
anotherVar="HelloWorld"
有没有办法可以将someVar设置为anotherVar的值?我想在python脚本中的文件中打印属性,然后从我的bash脚本中读取它们,但也许还有另一种方法。此外,我不知道,也不认为它有任何区别,但我可以使用相同的名称命名两个变量(someVar / someVar而不是someVar / anotherVar)
答案 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)
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
的环境变量。