@@ -2058,15 +2058,14 @@ def default(self, statement: Statement) -> None:
20582058
20592059 :param statement: Statement object with parsed input
20602060 """
2061- arg = statement .raw
20622061 if self .default_to_shell :
2063- result = os .system (arg )
2062+ result = os .system (statement . command_and_args )
20642063 # If os.system() succeeded, then don't print warning about unknown command
20652064 if not result :
20662065 return
20672066
20682067 # Print out a message stating this is an unknown command
2069- self .poutput ('*** Unknown syntax: {}\n ' .format (arg ))
2068+ self .poutput ('*** Unknown syntax: {}\n ' .format (statement . command_and_args ))
20702069
20712070 def pseudo_raw_input (self , prompt : str ) -> str :
20722071 """Began life as a copy of cmd's cmdloop; like raw_input but
@@ -2208,10 +2207,9 @@ def _cmdloop(self) -> bool:
22082207 # ----- Alias subcommand functions -----
22092208
22102209 def alias_create (self , args : argparse .Namespace ):
2211- """ Creates or overwrites an alias """
2210+ """Create or overwrites an alias"""
22122211
22132212 # Validate the alias name
2214- args .name = utils .strip_quotes (args .name )
22152213 valid , errmsg = self .statement_parser .is_valid_command (args .name )
22162214 if not valid :
22172215 self .perror ("Invalid alias name: {}" .format (errmsg ), traceback_war = False )
@@ -2234,30 +2232,24 @@ def alias_create(self, args: argparse.Namespace):
22342232 self .poutput ("Alias '{}' {}" .format (args .name , result ))
22352233
22362234 def alias_delete (self , args : argparse .Namespace ):
2237- """ Deletes aliases """
2235+ """Delete aliases"""
22382236 if args .all :
22392237 self .aliases .clear ()
22402238 self .poutput ("All aliases deleted" )
22412239 elif not args .name :
22422240 self .do_help ('alias delete' )
22432241 else :
2244- # Get rid of duplicates and strip quotes since the argparse decorator for do_alias() preserves them
2245- aliases_to_delete = [utils .strip_quotes (cur_name ) for cur_name in utils .remove_duplicates (args .name )]
2246-
2247- for cur_name in aliases_to_delete :
2242+ for cur_name in utils .remove_duplicates (args .name ):
22482243 if cur_name in self .aliases :
22492244 del self .aliases [cur_name ]
22502245 self .poutput ("Alias '{}' deleted" .format (cur_name ))
22512246 else :
22522247 self .perror ("Alias '{}' does not exist" .format (cur_name ), traceback_war = False )
22532248
22542249 def alias_list (self , args : argparse .Namespace ):
2255- """ Lists some or all aliases """
2250+ """List some or all aliases"""
22562251 if args .name :
2257- # Get rid of duplicates and strip quotes since the argparse decorator for do_alias() preserves them
2258- names_to_view = [utils .strip_quotes (cur_name ) for cur_name in utils .remove_duplicates (args .name )]
2259-
2260- for cur_name in names_to_view :
2252+ for cur_name in utils .remove_duplicates (args .name ):
22612253 if cur_name in self .aliases :
22622254 self .poutput ("alias create {} {}" .format (cur_name , self .aliases [cur_name ]))
22632255 else :
@@ -2343,10 +2335,9 @@ def do_alias(self, args: argparse.Namespace):
23432335 # ----- Macro subcommand functions -----
23442336
23452337 def macro_create (self , args : argparse .Namespace ):
2346- """ Creates or overwrites a macro """
2338+ """Create or overwrites a macro"""
23472339
23482340 # Validate the macro name
2349- args .name = utils .strip_quotes (args .name )
23502341 valid , errmsg = self .statement_parser .is_valid_command (args .name )
23512342 if not valid :
23522343 self .perror ("Invalid macro name: {}" .format (errmsg ), traceback_war = False )
@@ -2419,30 +2410,24 @@ def macro_create(self, args: argparse.Namespace):
24192410 self .poutput ("Macro '{}' {}" .format (args .name , result ))
24202411
24212412 def macro_delete (self , args : argparse .Namespace ):
2422- """ Deletes macros """
2413+ """Delete macros"""
24232414 if args .all :
24242415 self .macros .clear ()
24252416 self .poutput ("All macros deleted" )
24262417 elif not args .name :
24272418 self .do_help ('macro delete' )
24282419 else :
2429- # Get rid of duplicates and strip quotes since the argparse decorator for do_macro() preserves them
2430- macros_to_delete = [utils .strip_quotes (cur_name ) for cur_name in utils .remove_duplicates (args .name )]
2431-
2432- for cur_name in macros_to_delete :
2420+ for cur_name in utils .remove_duplicates (args .name ):
24332421 if cur_name in self .macros :
24342422 del self .macros [cur_name ]
24352423 self .poutput ("Macro '{}' deleted" .format (cur_name ))
24362424 else :
24372425 self .perror ("Macro '{}' does not exist" .format (cur_name ), traceback_war = False )
24382426
24392427 def macro_list (self , args : argparse .Namespace ):
2440- """ Lists some or all macros """
2428+ """List some or all macros"""
24412429 if args .name :
2442- # Get rid of duplicates and strip quotes since the argparse decorator for do_macro() preserves them
2443- names_to_view = [utils .strip_quotes (cur_name ) for cur_name in utils .remove_duplicates (args .name )]
2444-
2445- for cur_name in names_to_view :
2430+ for cur_name in utils .remove_duplicates (args .name ):
24462431 if cur_name in self .macros :
24472432 self .poutput ("macro create {} {}" .format (cur_name , self .macros [cur_name ].value ))
24482433 else :
@@ -2949,7 +2934,16 @@ def _reset_py_display() -> None:
29492934 sys .displayhook = sys .__displayhook__
29502935 sys .excepthook = sys .__excepthook__
29512936
2952- py_parser = ACArgumentParser ()
2937+ py_description = ("Invoke Python command or shell\n "
2938+ "\n "
2939+ "Note that, when invoking a command directly from the command line, this shell\n "
2940+ "has limited ability to parse Python statements into tokens. In particular,\n "
2941+ "there may be problems with whitespace and quotes depending on their placement.\n "
2942+ "\n "
2943+ "If you see strange parsing behavior, it's best to just open the Python shell by\n "
2944+ "providing no arguments to py and run more complex statements there." )
2945+
2946+ py_parser = ACArgumentParser (description = py_description )
29532947 py_parser .add_argument ('command' , help = "command to run" , nargs = '?' )
29542948 py_parser .add_argument ('remainder' , help = "remainder of command" , nargs = argparse .REMAINDER )
29552949
@@ -3000,6 +2994,8 @@ def run(filename: str):
30002994 if args .remainder :
30012995 full_command += ' ' + ' ' .join (args .remainder )
30022996
2997+ # If running at the CLI, print the output of the command
2998+ bridge .cmd_echo = True
30032999 interp .runcode (full_command )
30043000
30053001 # If there are no args, then we will open an interactive Python console
0 commit comments