La respuesta de Martijen tiene sentido, pero faltaba algo crucial que puede parecer obvio para los demás, pero que fue difícil de entender para mí.
En la versión donde usa argparse, necesita tener esta línea en el cuerpo principal.
args = parser.parse_args(args)
Normalmente, cuando usa argparse solo en un script, solo escribe
args = parser.parse_args()
y parse_args encuentran los argumentos de la línea de comando. Pero en este caso, la función principal no tiene acceso a los argumentos de la línea de comandos, por lo que debe decirle a argparse cuáles son los argumentos.
Aquí hay un ejemplo
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:])
Suponiendo que nombró a esto mytest.py Para ejecutarlo, puede hacer cualquiera de estos desde la línea de comando
python ./mytest.py -x 8
python ./mytest.py -x 8 -y 2
python ./mytest.py
que regresa respectivamente
X center: 8.0
Y center: 4
o
X center: 8.0
Y center: 2.0
o
X center: 2
Y center: 4
O si desea ejecutar desde otro script de Python, puede hacerlo
import mytest
mytest.main(["-x","7","-y","6"])
que regresa
X center: 7.0
Y center: 6.0
myModule.main()
. ¿Qué has intentado hasta ahora?