@@ -538,6 +538,35 @@ def testSubParsers(self):
538538 config_file1 .close ()
539539 config_file2 .close ()
540540
541+ def testSubParserEnvVar (self ):
542+ """Test that env vars work with subparsers (issue #350)."""
543+ parser = configargparse .ArgumentParser (auto_env_var_prefix = "" )
544+ parser .add_argument ("--tenant" , env_var = "TENANT" , required = True )
545+ subparsers = parser .add_subparsers (dest = "action" )
546+ appliance_parser = subparsers .add_parser ("appliance" )
547+ appliance_parser .add_argument ("--token" , env_var = "TOKEN" , required = True )
548+
549+ # Test parent parser env var via env_vars param
550+ ns = parser .parse_args (
551+ args = ["appliance" , "--token" , "test-token" ],
552+ env_vars = {"TENANT" : "test-tenant" },
553+ )
554+ self .assertEqual (ns .tenant , "test-tenant" )
555+ self .assertEqual (ns .token , "test-token" )
556+ self .assertEqual (ns .action , "appliance" )
557+
558+ # Test both parent and subparser env vars via real os.environ
559+ os .environ ["TENANT" ] = "test-tenant"
560+ os .environ ["TOKEN" ] = "test-token"
561+ try :
562+ ns = parser .parse_args (args = ["appliance" ])
563+ self .assertEqual (ns .tenant , "test-tenant" )
564+ self .assertEqual (ns .token , "test-token" )
565+ self .assertEqual (ns .action , "appliance" )
566+ finally :
567+ del os .environ ["TENANT" ]
568+ del os .environ ["TOKEN" ]
569+
541570 def testAddArgsErrors (self ):
542571 self .assertRaisesRegex (
543572 ValueError ,
0 commit comments