18

独自の引数を python スクリプトに渡す bash スクリプトを作成しようとしています。私はそれがこのように動作することを望みます。

このように実行すると:

script.sh latest

次に、bash スクリプト内で、次のように「latest」引数を使用して python スクリプトを実行します。

python script.py latest

同様に、引数 123 を指定して bash スクリプトを実行すると、python スクリプトは次のようになります。

python script.py 123

これを達成する方法を理解してくれる人はいますか?

4

4 に答える 4

39

この場合の秘訣は、引数がない場合を含め、いくらでも多くの引数を渡し、元のコマンド ラインに存在するグループ化を保持することです。

したがって、次の 3 つのケースが機能する必要があります。

script.sh                       # no args
script.sh how now               # some number
script.sh "how now" "brown cow" # args that need to stay quoted

シェルはマクロ言語であるため、これを行う自然な方法は実際にはありません。そのため、DTRT のみを実行する魔法の構文が追加されています。

#!/bin/sh

python script.py "$@"
于 2013-01-15T15:20:45.537 に答える
7

In the pythonscript script.py use getopt.getopt(args, options[, long_options]) to get the arguments.

Example:

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()
于 2013-01-15T15:28:59.157 に答える
4

非常に優れたビルトイン パーサーは 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))
于 2013-01-15T15:44:45.120 に答える
1

bash では、スクリプトに渡された引数は、$#表記法 (# は数値です。$# をまったく同じように使用すると、渡された引数の数が得られます) でアクセスされます。したがって、引数を渡したい場合:

スクリプトの呼び出し:

`#script.sh argument`

スクリプト内:

python script.py "$1"
于 2013-01-15T15:21:06.833 に答える