我想創建一個bash腳本,它將自己的參數傳遞給python腳本。我希望它能像這樣工作。將bash參數傳遞給python腳本
如果我運行它,因爲這:
script.sh latest
然後bash腳本中運行Python腳本,像這樣的「最新」的說法:
python script.py latest
同樣,如果bash腳本是運行參數123然後python腳本,因此:
python script.py 123
任何人都可以幫助我瞭解請完成此操作?
我想創建一個bash腳本,它將自己的參數傳遞給python腳本。我希望它能像這樣工作。將bash參數傳遞給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
是不是真的這樣做,因爲外殼是一個宏語言以自然的方式,所以他們增加了一些神奇的語法會只是DTRT。
#!/bin/sh
python script.py "[email protected]"
在bash,傳遞給腳本的參數與$#
符號訪問(#是一個數字。使用$#完全一樣,應該給你args來傳遞的數量)。所以,如果你想傳遞參數:
調用腳本:
`#script.sh argument`
在該腳本:
python script.py "$1"
需要引用''$ 1「'來保留空格 –
謝謝@glennjackman我已經更新了未來訪問者的代碼。 – Grambot
在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()
一個非常咕BUIT解析器是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腳本中傳遞和使用參數是任何體面教程的一部分。 – StoryTeller