我想创建一个调用 python 脚本的 bash 脚本。 python 脚本接受位置参数、命名参数和布尔标志。这个想法是 bash 脚本将用户提供的任何内容传递给 python 脚本。
以这个Python脚本
example.py
为例:
import argparse
def run(positional_argument,named_argument='default',flag=False):
print(positional_argument)
print(named_argument)
print(flag)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
# add positional arguments
parser.add_argument('positional_argument',type=str,choices=['a','b'])
# add keyword arguments
parser.add_argument('--named_argument',type=str,required=False,default='default')
# add flags
parser.add_argument('--flag',action='store_true')
# parse arguments
args = parser.parse_args()
# call function
run(positional_argument=args.positional_argument,
named_argument=args.named_argument,
flag=args.flag)
现在编写一个脚本
wrapper.sh
在内部调用 example.py
P.S.:为好奇的读者提供更广泛的背景(尽管并不是解决我的问题所必需的):我想创建一个也可以用作命令行应用程序的 pip 包。 已经有一个答案,但它只涵盖位置参数。
回答我自己的问题。 here提供的解决方案也涵盖了我的示例。所以
wrapper.sh
看起来像这样:
#!/usr/bin/env bash
if [[ ! $@ ]]; then
python3 -m example -h
else
python3 -m example $@
fi