将Python脚本的返回值传递给Shell脚本

40

我是Python的新手。我正在创建一个Python脚本,它返回一个字符串“hello world”。同时我也在创建一个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') 
3个回答

62

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

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

在Shell中:

#!/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

1
谢谢阿里。这段代码运行良好。但我需要返回一个字符串值。怎么可能实现? - Abdul Manaf
4
你应该捕获Python的结果:a=`python python/pythonScript1.py "test"``; echo $a 将打印出你在Python代码中所打印的内容。 - Ali Nikneshan
在我的情况下,sys.exit(0) 不返回任何内容,shell 脚本也停止了。但是 print(0) 运行良好。在我的情况下发生了什么? - zhangboyu
@zhangboyu,我猜你使用的是单引号 ' 而不是 `。 - Ali Nikneshan
@AliNikneshan 我真的使用了 ` - zhangboyu
@AliNikneshan 我注意到发生了什么。在shell脚本中,我设置了-e,所以它在exit()时停止了。是否有其他方法可以在设置-e时获取值? - zhangboyu

10

像这样将命令行参数传递给Shell脚本,然后传递给Python:

python script.py $1 $2 $3

按照以下方式打印返回代码:

echo $?

3
您也可以使用exit()而不需要导入sys模块。以下是一个示例:
$ python
>>> exit(1)
$ echo $?
1

$ python
>>> exit(0)
$ echo $?
0

exit()函数定义在site.py中,只有在导入site模块时才有效,因此应该仅在解释器中使用。 - bgrupczy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接