将bashparameter passing给python脚本

我正在尝试创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"