2016-01-22 406 views
2

我已经在shell中编写了一个程序。在这个shell脚本中,我正在调用一个python脚本。这工作正常。 我想让我的python脚本将输出返回到shell脚本。 这可能吗? (我没有在谷歌上得到任何这样的方式)。 如果可能,请告诉我该怎么做?从shell调用python并捕获输出

test.sh

#!/bin/bash 
python call_py.py 

和Python脚本(call_py.py

#!/usr/bin/python 
if some_check: 
    "return working" 
else: 
    "return not working" 

如何从Python和捕捉返回的壳呢?

回答

3

为了得到一个命令的输出在一个变量,使用过程中的取代:

var=$(cmd) 

例如

var=$(ls $HOME) 

var=$(python myscript.py) 

的$()是(几乎)完全等同于使用反引号,但是反引号语法已被弃用,并且$()是首选。

如果您的意图是返回一个字符串'working'或'not working',并在shell脚本中使用该值来确定python脚本是否成功,请更改您的计划。使用返回值要好得多。例如,在Python中你'返回0'或'返回1'(成功为0,失败为1),然后shell脚本就是:

if python call_py.py; then 
    echo success 
else 
    echo failure 
fi 
+0

在python中,我们可以使用sys.exit(0)成功和sys.exit(1)失败。 – Gauranga

2

使用$(...)以字符串形式捕获命令的stdout。

output=$(./script.py) 
echo "output was '$output'" 

if [[ $output == foobar ]]; then 
    do-something 
else 
    do-something-else 
fi