@@ -380,7 +380,7 @@ def __init__(
380
380
381
381
main_kwargs , subparser_kwargs = self ._setup_parser_kwargs (self .parser_kwargs )
382
382
self .setup_parser (run , main_kwargs , subparser_kwargs )
383
- self .parse_arguments (self .parser , args )
383
+ self .parse_arguments (self .parser , args , run )
384
384
385
385
self .subcommand = self .config ["subcommand" ] if run else None
386
386
@@ -520,14 +520,19 @@ def link_optimizers_and_lr_schedulers(parser: LightningArgumentParser) -> None:
520
520
add_class_path = _add_class_path_generator (class_type )
521
521
parser .link_arguments (key , link_to , compute_fn = add_class_path )
522
522
523
- def parse_arguments (self , parser : LightningArgumentParser , args : ArgsType ) -> None :
523
+ def parse_arguments (self , parser : LightningArgumentParser , args : ArgsType , run : bool ) -> None :
524
524
"""Parses command line arguments and stores it in ``self.config``."""
525
525
if args is not None and len (sys .argv ) > 1 :
526
526
rank_zero_warn (
527
527
"LightningCLI's args parameter is intended to run from within Python like if it were from the command "
528
528
"line. To prevent mistakes it is not recommended to provide both args and command line arguments, got: "
529
529
f"sys.argv[1:]={ sys .argv [1 :]} , args={ args } ."
530
530
)
531
+ if args is None and run and len (sys .argv ) > 1 and sys .argv [1 ] not in self .subcommands ():
532
+ raise ValueError (
533
+ "When `LightningCLI(run=True)` is used (default), you need to provide a subcommand as the first"
534
+ f" argument. For example: `python { sys .argv [0 ]} fit ...`"
535
+ )
531
536
if isinstance (args , (dict , Namespace )):
532
537
self .config = parser .parse_object (args )
533
538
else :
0 commit comments