【问题标题】:How to return a value from a shell script in a python script如何从 python 脚本中的 shell 脚本返回一个值
【发布时间】:2013-06-21 14:53:13
【问题描述】:

我有一个 python 脚本,它需要一个来自 shell 脚本的值。

以下是shell脚本(a.sh):

#!/bin/bash
return_value(){
  value=$(///some unix command)
  echo "$value"
}

return_value

以下是python脚本:

Import subprocess
answer = Subprocess.call([‘./a.sh’])
print("the answer is %s % answer")  

但它不起作用。错误是“ImportError : No module named subprocess”。我猜我的版本(Python 2.3.4)已经很老了。在这种情况下是否可以应用子流程的替代品??

【问题讨论】:

    标签: python linux bash shell unix


    【解决方案1】:

    使用subprocess.check_output:

    import subprocess
    answer = subprocess.check_output(['./a.sh'])
    print("the answer is {}".format(answer))
    

    关于subprocess.check_output的帮助:

    >>> print subprocess.check_output.__doc__
    Run command with arguments and return its output as a byte string.
    

    演示:

    >>> import subprocess
    >>> answer = subprocess.check_output(['./a.sh'])
    >>> answer
    'Hello World!\n'
    >>> print("the answer is {}".format(answer))
    the answer is Hello World!
    

    a.sh

    #!/bin/bash
    STR="Hello World!"
    echo $STR
    

    【讨论】:

    • 感谢 ashwini 的回答。python 脚本中的语句实际上不是打印语句,而是 cvs 命令。我只是为了询问而简化了它。所以在这种情况下,我们可以使用 {} 来插入答案变量还是我们需要使用 %s ???
    • @user2475677 str.format 被称为新式字符串格式,如果您只使用字符串格式,那么这两个选项都可以。
    • 非常感谢 ashwini,但我才意识到,我的 Python (2.3.4) 版本已经很旧了!!它没有“子流程”
    • 如果这个“a.sh”脚本是一个交互式脚本,它会提示用户几个问题。在那种情况下,我们如何在 python 脚本中捕获这些值...?
    【解决方案2】:

    使用 Subprocess.check_output 而不是 Subprocess.call

    Subprocess.call 返回该脚本的返回码。
    Subprocess.check_output 返回脚本输出的字节流。

    Subprocess.check_output on python 3.3 doc site

    【讨论】:

      猜你喜欢
      • 2016-03-14
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 2022-01-12
      • 2012-01-11
      • 2014-05-25
      相关资源
      最近更新 更多