我正在尝试创build一个bash脚本,它将自己的parameter passing给一个python脚本。 我希望它能像这样工作。
如果我这样运行它:
script.sh latest
然后在bash脚本中运行一个python脚本,像这样的“最新”参数:
python script.py latest
同样,如果bash脚本使用参数123运行,那么python脚本就是这样的:
python script.py 123
任何人都可以帮助我理解如何做到这一点?
在这种情况下,诀窍就是通过你拥有的许多参数,包括没有的情况,并保留原始命令行中存在的任何分组。
所以,你想要这三个案例工作:
script.sh # no args script.sh how now # some number script.sh "how now" "brown cow" # args that need to stay quoted
有没有一种真正的自然的方式来做到这一点,因为shell是一种宏语言,所以他们已经添加了一些神奇的语法,只是DTRT。
#!/bin/sh python script.py "$@"
在pythonscript script.py
使用getopt.getopt(args, options[, long_options])
来获取参数。
例:
import getopt, sys def main(): try: opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="]) except getopt.GetoptError as err: # print help information and exit: print str(err) # will print something like "option -a not recognized" usage() sys.exit(2) output = None verbose = False for o, a in opts: if o == "-v": verbose = True elif o in ("-h", "--help"): usage() sys.exit() elif o in ("-o", "--output"): output = a else: assert False, "unhandled option" # ... if __name__ == "__main__": main()
一个非常棒的内置解析器是argparse。 哟可以使用它如下:
import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers))
在bash中,传递给脚本的参数是用$#
符号来访问的(#是一个数字,使用$#就像给出了传递的参数数量一样)。 所以如果你想传递参数:
调用脚本:
`#script.sh argument`
在脚本中:
python script.py "$1"