将bash参数传递给python脚本

Jim*_*mmy 14 python linux bash shell debian

我正在尝试创建一个bash脚本,它将自己的参数传递给python脚本.我希望它能像这样工作.

如果我这样运行它:

script.sh latest
Run Code Online (Sandbox Code Playgroud)

然后在bash脚本中运行一个带有"latest"参数的python脚本,如下所示:

python script.py latest
Run Code Online (Sandbox Code Playgroud)

同样,如果使用参数123运行bash脚本,那么python脚本如下:

python script.py 123
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我理解如何做到这一点吗?

Dig*_*oss 31

在这种情况下,诀窍是通过你拥有的许多参数,包括没有参数的情况,并保留原始命令行中存在的任何分组.

所以,你希望这三种情况起作用:

script.sh                       # no args
script.sh how now               # some number
script.sh "how now" "brown cow" # args that need to stay quoted
Run Code Online (Sandbox Code Playgroud)

实际上没有一种自然的方法,因为shell是一种宏语言,所以他们添加了一些只有DTRT的神奇语法.

#!/bin/sh

python script.py "$@"
Run Code Online (Sandbox Code Playgroud)


wew*_*ewa 6

在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()
Run Code Online (Sandbox Code Playgroud)