【问题标题】:Capture return value from python从python捕获返回值
【发布时间】:2016-09-09 12:21:33
【问题描述】:

我有一个 shell 脚本 TestNode.sh。该脚本的内容如下:

port_up=$(python TestPorts.py)
python TestRPMs.py

现在,我想捕获这些脚本返回的值。

TestPorts.py

def CheckPorts():
    if PortWorking(8080):
        print "8080 working"
        return "8080"
    elif PortWorking(9090):
        print "9090 working"
        return "9090"

但是当我检查了可用的答案时,它们对我不起作用。 print 正在推送变量 port_up 中的值,但我希望 print 应该在控制台上 print 并且变量 port_up 应该从 return 语句中获取值。有没有办法做到这一点?

注意:我不想使用sys.exit()。如果没有这个,是否有可能实现相同的目标?

【问题讨论】:

    标签: python shell


    【解决方案1】:

    要从 Python 脚本返回退出代码,您可以使用 sys.exit(); exit() 可能也可以。在 Bash(和类似的)shell 中,可以在$? 中找到上一个命令的退出代码。

    但是,Linux shell 退出代码是 8 位无符号整数,即在 0-255 范围内,如 this answer 中所述。所以你的策略行不通。

    也许您可以将“8080 working”打印到标准错误或日志文件,然后将“8080”打印到标准输出,这样您就可以使用$() 捕获它。

    【讨论】:

      【解决方案2】:

      但我希望 print 应该在控制台上打印,并且变量 port_up 应该从 return 语句中获取值。

      那么不要捕获输出。而是这样做:

      python TestPorts.py
      port_up=$? # return value of the last statement
      python TestRPMs.py
      

      你可以这样做:

      def CheckPorts():
          if PortWorking(8080):
              sys.stderr.write("8080 working")
          print 8080
      

      但是我也不太乐意将“输出”打印到stderr。

      或者,您可以跳过在 python 脚本中打印“8080 working”消息并从 shell 脚本中打印。

      def CheckPorts():
          if PortWorking(8080):
              return "8080"
      

      和:

      port_up=$(python TestPorts.py)
      echo "$port_up working"
      python TestRPMs.py
      

      【讨论】:

      • 这只是告诉脚本执行是否成功。
      • 如果你想使用退出值(获取端口号),我看不到另一种方法(写入文件或解析 python 脚本的输出等)。
      • 嗯,那么我必须重新设计我的解决方案。谢谢:)
      • 我已经更新了一些建议。解决这个问题并不难。但这取决于您决定您喜欢哪一个。
      猜你喜欢
      • 2014-01-23
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2018-08-06
      • 2017-08-11
      • 1970-01-01
      • 2018-04-19
      • 2014-09-08
      相关资源
      最近更新 更多