【问题标题】:return value from python script to shell script从 python 脚本返回值到 shell 脚本
【发布时间】:2016-03-14 07:10:05
【问题描述】:

我是 Python 新手。我正在创建一个返回字符串“hello world”的 Python 脚本。我正在创建一个 shell 脚本。我正在添加从 shell 到 Python 脚本的调用。

  1. 我需要将参数从 shell 传递给 Python。
  2. 我需要在 shell 脚本中打印 Python 返回的值。

这是我的代码:

shellscript1.sh

#!/bin/bash
# script for testing
clear
echo "............script started............"
sleep 1
python python/pythonScript1.py
exit

pythonScript1.py

#!/usr/bin/python
import sys

print "Starting python script!"
try:
    sys.exit('helloWorld1') 
except:
     sys.exit('helloWorld2') 

【问题讨论】:

    标签: python linux bash shell


    【解决方案1】:

    您不能将消息作为退出代码返回,只能返回数字。在 bash 中,它可以通过 $? 访问。您也可以使用sys.argv 访问代码参数:

    import sys
    if sys.argv[1]=='hi':
        print 'Salaam'
    sys.exit(0)
    

    在外壳中:

    #!/bin/bash
    # script for tesing
    clear
    echo "............script started............"
    sleep 1
    result=`python python/pythonScript1.py "hi"`
    if [ "$result" == "Salaam" ]; then
        echo "script return correct response"
    fi
    

    【讨论】:

    • 谢谢阿里。这段代码工作正常。但我需要返回一个字符串值。怎么可能?
    • 你应该捕获python结果:a=`python python/pythonScript1.py "test"``; echo $a 将打印您在 python 代码中打印的内容
    • 就我而言, sys.exit(0) 不返回任何内容,并且 shell 脚本也会停止。但是 print(0) 效果很好。我的情况会怎样?
    • @zhangboyu ,我猜你用 ' 而不是 `
    • @AliNikneshan 我真的用过`
    【解决方案2】:

    将命令行参数传递给 shell 脚本到 Python,如下所示:

    python script.py $1 $2 $3
    

    像这样打印返回码:

    echo $?
    

    【讨论】: