A resposta de Martijen faz sentido, mas estava faltando algo crucial que pode parecer óbvio para os outros, mas era difícil para mim descobrir.
Na versão em que você usa argparse, você precisa ter esta linha no corpo principal.
args = parser.parse_args(args)
Normalmente, quando você está usando argparse apenas em um script, você acabou de escrever
args = parser.parse_args()
e parse_args encontra os argumentos da linha de comando. Mas, neste caso, a função principal não tem acesso aos argumentos da linha de comando, então você deve informar ao argparse quais são os argumentos.
Aqui está um exemplo
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:])
Supondo que você tenha nomeado este mytest.py Para executá-lo, você pode fazer qualquer um destes na linha de comando
python ./mytest.py -x 8
python ./mytest.py -x 8 -y 2
python ./mytest.py
que retorna respectivamente
X center: 8.0
Y center: 4
ou
X center: 8.0
Y center: 2.0
ou
X center: 2
Y center: 4
Ou se você deseja executar a partir de outro script Python, você pode fazer
import mytest
mytest.main(["-x","7","-y","6"])
que retorna
X center: 7.0
Y center: 6.0
myModule.main()
. O que você tentou até agora?