Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 从shell调用python并捕获输出_Python 2.7_Shell_Function Call - Fatal编程技术网

Python 2.7 从shell调用python并捕获输出

Python 2.7 从shell调用python并捕获输出,python-2.7,shell,function-call,Python 2.7,Shell,Function Call,我已经用shell编写了一个程序。在这个shell脚本中,我调用了一个python脚本。这很好。 我希望python脚本将输出返回到shell脚本。 可能吗?(我在谷歌上找不到这样的方法)。 如果可能的话,你能告诉我怎么做吗 test.sh #!/bin/bash python call_py.py 和python脚本(call_py.py) 如何从python返回并在shell中捕获?使用$(…)将命令的stdout捕获为字符串 output=$(./script.py) echo "out

我已经用shell编写了一个程序。在这个shell脚本中,我调用了一个python脚本。这很好。 我希望python脚本将输出返回到shell脚本。 可能吗?(我在谷歌上找不到这样的方法)。 如果可能的话,你能告诉我怎么做吗

test.sh

#!/bin/bash
python call_py.py
和python脚本(
call_py.py

如何从python返回并在shell中捕获?

使用
$(…)
将命令的stdout捕获为字符串

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

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

要获取变量中命令的输出,请使用进程替换:

var=$( cmd )
乙二醇

$()几乎完全等同于使用backticks,但backticks语法已被弃用,而$()是首选

如果您打算返回字符串“working”或“notworking”,并在shell脚本中使用该值来确定python脚本是否成功,请更改计划。最好使用返回值。例如,在python中,您“返回0”或“返回1”(0表示成功,1表示失败),然后shell脚本就是:

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

在python中,我们可以使用sys.exit(0)来表示成功,使用sys.exit(1)来表示失败。这个简单的解决方案即使在修改后也不会工作(python-u some_pyunit_tests.py 2>&1)@alexh?您的示例将python脚本编写的数据分配给左侧变量的文件描述符1或2(例如stdout和stderr)。这在什么方面不起作用?我不知道,这让我发疯。我最好的猜测是pyunit中有一些黑魔法,它产生了一个单独的进程,该进程以某种方式将输出从调用它的子shell外部重定向到终端。屏幕上会显示内容。我似乎无法将其捕获到文件或变量中。
var=$( ls $HOME )
var=$( python myscript.py)
if python call_py.py; then
  echo success
else
  echo failure
fi