Ответ Мартиджена имеет смысл, но в нем упускается что-то важное, что может показаться очевидным для других, но мне было трудно понять.
В версии, где вы используете argparse, вам необходимо, чтобы эта строка была в основном теле.
args = parser.parse_args(args)
Обычно, когда вы используете argparse только в скрипте, вы просто пишете
args = parser.parse_args()
и parse_args находят аргументы из командной строки. Но в этом случае основная функция не имеет доступа к аргументам командной строки, поэтому вы должны сообщить argparse, каковы аргументы.
Вот пример
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:])
Предполагая, что вы назвали этот mytest.py Чтобы запустить его, вы можете выполнить любое из этих действий из командной строки.
python ./mytest.py -x 8
python ./mytest.py -x 8 -y 2
python ./mytest.py
который возвращается соответственно
X center: 8.0
Y center: 4
или же
X center: 8.0
Y center: 2.0
или же
X center: 2
Y center: 4
Или, если вы хотите запустить из другого скрипта Python, вы можете сделать
import mytest
mytest.main(["-x","7","-y","6"])
который возвращается
X center: 7.0
Y center: 6.0
myModule.main()
. что ты уже испробовал?