Odpowiedź Martijena ma sens, ale brakowało w niej czegoś kluczowego, co może wydawać się oczywiste dla innych, ale było dla mnie trudne do zrozumienia.
W wersji, w której używasz argparse, musisz mieć tę linię w głównej części.
args = parser.parse_args(args)
Zwykle, gdy używasz argparse tylko w skrypcie, po prostu piszesz
args = parser.parse_args()
i parse_args znajdź argumenty z wiersza poleceń. Ale w tym przypadku główna funkcja nie ma dostępu do argumentów wiersza poleceń, więc musisz powiedzieć argparse, jakie to argumenty.
Oto przykład
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:])
Zakładając, że nazwałeś ten mytest.py Aby go uruchomić, możesz wykonać dowolną z tych czynności z wiersza poleceń
python ./mytest.py -x 8
python ./mytest.py -x 8 -y 2
python ./mytest.py
który zwraca odpowiednio
X center: 8.0
Y center: 4
lub
X center: 8.0
Y center: 2.0
lub
X center: 2
Y center: 4
Lub jeśli chcesz uruchomić z innego skryptu Pythona, możesz to zrobić
import mytest
mytest.main(["-x","7","-y","6"])
który powraca
X center: 7.0
Y center: 6.0
myModule.main()
. Czego spróbowałeś do tej pory?