1919from bpython .importcompletion import find_iterator
2020from bpython .curtsiesfrontend import events as bpythonevents
2121from bpython import inspection
22+ from bpython .repl import extract_exit_value
2223
2324logger = logging .getLogger (__name__ )
2425
@@ -55,7 +56,7 @@ def main(args=None, locals_=None, banner=None):
5556 if exec_args :
5657 if not options :
5758 raise ValueError ("don't pass in exec_args without options" )
58- exit_value = 0
59+ exit_value = ()
5960 if options .paste :
6061 paste = curtsies .events .PasteEvent ()
6162 encoding = inspection .get_encoding_file (exec_args [0 ])
@@ -69,14 +70,18 @@ def main(args=None, locals_=None, banner=None):
6970 except SystemExit as e :
7071 exit_value = e .args
7172 if not options .interactive :
72- raise SystemExit (exit_value )
73+ return extract_exit_value (exit_value )
7374 else :
7475 # expected for interactive sessions (vanilla python does it)
7576 sys .path .insert (0 , '' )
7677
7778 print (bpargs .version_banner ())
78- mainloop (config , locals_ , banner , interp , paste ,
79- interactive = (not exec_args ))
79+ try :
80+ exit_value = mainloop (config , locals_ , banner , interp , paste ,
81+ interactive = (not exec_args ))
82+ except (SystemExitFromCodeGreenlet , SystemExit ) as e :
83+ exit_value = e .args
84+ return extract_exit_value (exit_value )
8085
8186
8287def mainloop (config , locals_ , banner , interp = None , paste = None ,
0 commit comments