将参数传递给包装在外壳脚本中的Python脚本

时间:2018-08-03 12:46:12

标签: python shell

考虑以下Python脚本 script.py

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-a', type=int)
parser.add_argument('-b', type=int)

args = parser.parse_args()

print('a + b = {}'.format(args.a + args.b))

以及以下shell脚本 runner.sh

python3 script.py

我知道我可以像这样$ python3 script.py -a 4 -b 6运行 script.py 以获得以下结果:a + b = 10,但是我想从内部运行script.py Shell脚本,并可以传递-a-b,如下所示:./runner.sh -a 4 -b 6。但是,当我尝试此操作时,不会传递这些参数:

$ ./runner.sh -a 10 -b 6
Traceback (most recent call last):
  File "script.py", line 10, in <module>
    print('a + b = {}'.format(args.a + args.b))
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

如何将参数传递给包装在Shell脚本中的Python脚本?对于它的价值,我也尝试了sys.argv,但无济于事。

1 个答案:

答案 0 :(得分:3)

您需要告诉bash脚本将其参数传递给script.py

#!/bin/bash

python script.py "$@"

您的脚本忽略了自己的参数,而没有任何参数地运行script.py