为什么Shell将python脚本的stdout重定向到我的Shell变量中?
我正在关注另一个老帖子来解决我遇到的一个问题。我的python脚本返回一个值,我希望shell脚本能够检索该值。所以我遵循了这个提示: 您可以用Python打印您的值,如下所示: 在shell脚本中: 问题是我的python中的每个为什么Shell将python脚本的stdout重定向到我的Shell变量中?,python,shell,Python,Shell,我正在关注另一个老帖子来解决我遇到的一个问题。我的python脚本返回一个值,我希望shell脚本能够检索该值。所以我遵循了这个提示: 您可以用Python打印您的值,如下所示: 在shell脚本中: 问题是我的python中的每个sys.stdout都存储在fooShell中。所以我的变量有所有的输出,但不是我想要返回的变量。你有什么建议吗 编辑:在python脚本的末尾有一个简单的“返回变量”。我需要shell脚本来调用python并获得由它计算的变量。如何将变量从python环境传输到sh
sys.stdout
都存储在fooShell
中。所以我的变量有所有的输出,但不是我想要返回的变量。你有什么建议吗
编辑:在python脚本的末尾有一个简单的“
返回变量”。我需要shell脚本来调用python并获得由它计算的变量。如何将变量从python环境传输到shell环境?预计python fooPy.py
的所有stdout
都将保存到fooShell
。如果要隔离此函数返回的值并将其放入shell中,可以将其保存到文件中,如下所示
f = open('fooPy.txt','w')
f.write(str(fooPy))
f.close()
然后在shell脚本中
fooShell=$(cat fooPy.txt)
rm fooPy.txt
脚本没有返回值,它们有退出代码和输出,所以这里似乎有一些误解。你能更准确地解释你想做什么吗?(至于sys.stdout进入shell变量的原因,$()
构造就是这样做的…)进程通过stdio通道相互通信。shell和常见的*nix实用程序在这方面特别擅长(想想shell管道cmd1 | cmd2 | cmd3
)——想象一下,shell进入python进程的内存提取值是多么困难/不安全。作为真正的注释,这就是它的工作方式。感谢您的建议,这似乎很不寻常,我将尝试一下。这是在环境之间传递价值的唯一方式吗?
f = open('fooPy.txt','w')
f.write(str(fooPy))
f.close()
fooShell=$(cat fooPy.txt)
rm fooPy.txt