Martijen'in cevabı mantıklı, ancak başkalarına açık gibi görünen ancak benim için çözmesi zor olan çok önemli bir şeyi gözden kaçırıyordu.
Argparse kullandığınız versiyonda, ana gövde içerisinde bu çizgiye sahip olmanız gerekmektedir.
args = parser.parse_args(args)
Normalde argparse'ı sadece bir komut dosyasında kullandığınızda
args = parser.parse_args()
ve parse_args komut satırındaki argümanları bulur. Ancak bu durumda ana işlevin komut satırı argümanlarına erişimi yoktur, bu nedenle argparse'a argümanların ne olduğunu söylemeniz gerekir.
İşte bir örnek
import argparse
import sys
def x(x_center, y_center):
print "X center:", x_center
print "Y center:", y_center
def main(args):
parser = argparse.ArgumentParser(description="Do something.")
parser.add_argument("-x", "--xcenter", type=float, default= 2, required=False)
parser.add_argument("-y", "--ycenter", type=float, default= 4, required=False)
args = parser.parse_args(args)
x(args.xcenter, args.ycenter)
if __name__ == '__main__':
main(sys.argv[1:])
Bunu mytest.py olarak adlandırdığınızı varsayarsak, çalıştırmak için bunlardan herhangi birini komut satırından yapabilirsiniz
python ./mytest.py -x 8
python ./mytest.py -x 8 -y 2
python ./mytest.py
sırasıyla dönen
X center: 8.0
Y center: 4
veya
X center: 8.0
Y center: 2.0
veya
X center: 2
Y center: 4
Veya başka bir python betiğinden çalıştırmak istiyorsanız şunları yapabilirsiniz:
import mytest
mytest.main(["-x","7","-y","6"])
hangi döner
X center: 7.0
Y center: 6.0
myModule.main()
. Şimdiye kadar ne denedin?