pythonスクリプトに独自の引数を渡すbashスクリプトを作成しようとしています。このように動作させたいです。
これを次のように実行すると:
script.sh latest
次に、bashスクリプト内でpythonスクリプトを次のような「最新の」引数で実行します。
python script.py latest
同様に、bashスクリプトが引数123で実行されている場合、pythonスクリプトは次のようになります。
python script.py 123
これを達成する方法を理解するのを手伝ってくれる人はいますか?
この場合の秘訣は、引数がない場合を含め、引数はいくつでも渡すことと、元のコマンドラインに存在していたグループ化を保持することです。
したがって、次の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 "$@"
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"