def check(self, argv, env, **expected): import StringIO from pypy.interpreter import app_main saved_env = os.environ.copy() saved_sys_argv = sys.argv[:] saved_sys_stdout = sys.stdout saved_sys_stderr = sys.stdout app_main.WE_ARE_TRANSLATED = False app_main.os = os try: os.environ.update(env) sys.stdout = sys.stderr = StringIO.StringIO() try: options = app_main.parse_command_line(argv) except SystemExit: output = expected['output_contains'] assert output in sys.stdout.getvalue() else: self.check_options(options, **expected) finally: os.environ.clear() os.environ.update(saved_env) sys.argv[:] = saved_sys_argv sys.stdout = saved_sys_stdout sys.stderr = saved_sys_stderr if __pypy__: __pypy__.set_debug(True) app_main.WE_ARE_TRANSLATED = True
def check(self, argv, env, **expected): import StringIO from pypy.interpreter import app_main saved_env = os.environ.copy() saved_sys_argv = sys.argv[:] saved_sys_stdout = sys.stdout saved_sys_stderr = sys.stdout app_main.os = os try: os.environ.update(env) sys.stdout = sys.stderr = StringIO.StringIO() try: options = app_main.parse_command_line(argv) except SystemExit: output = expected["output_contains"] assert output in sys.stdout.getvalue() else: self.check_options(options, **expected) finally: os.environ.clear() os.environ.update(saved_env) sys.argv[:] = saved_sys_argv sys.stdout = saved_sys_stdout sys.stderr = saved_sys_stderr if __pypy__: __pypy__.set_debug(True)
def parse_command_line(argv): import os options = default_options.copy() options['warnoptions'] = [] iterargv = iter(argv) argv = None for arg in iterargv: # # If the next argument isn't at least two characters long or # doesn't start with '-', stop processing if len(arg) < 2 or arg[0] != '-': if IS_WINDOWS and arg == '/?': # special case print_help() argv = [arg] + list(iterargv) # finishes processing # # If the next argument is directly in cmdline_options, handle # it as a single argument elif arg in cmdline_options: argv = handle_argument(arg, options, iterargv) # # Else interpret the rest of the argument character by character else: iterarg = iter(arg) iterarg.next() # skip the '-' for c in iterarg: if c not in cmdline_options: raise CommandLineError('Unknown option: -%s' % (c, )) argv = handle_argument(c, options, iterargv, iterarg) if not argv: argv = [''] options["run_stdin"] = True elif argv[0] == '-': options["run_stdin"] = True # don't change the list that sys.argv is bound to # (relevant in case of "reload(sys)") sys.argv[:] = argv if not options["ignore_environment"]: parse_env('PYTHONDEBUG', "debug", options) if os.getenv('PYTHONDONTWRITEBYTECODE'): options["dont_write_bytecode"] = 1 if os.getenv('PYTHONNOUSERSITE'): options["no_user_site"] = 1 if os.getenv('PYTHONUNBUFFERED'): options["unbuffered"] = 1 parse_env('PYTHONVERBOSE', "verbose", options) parse_env('PYTHONOPTIMIZE', "optimize", options) if (options["interactive"] or (not options["ignore_environment"] and os.getenv('PYTHONINSPECT'))): options["inspect"] = 1 ## We don't print the warning, because it offers no additional security ## in CPython either (http://bugs.python.org/issue14621) ## if (options["hash_randomization"] or os.getenv('PYTHONHASHSEED')): ## print >> sys.stderr, ( ## "Warning: pypy does not implement hash randomization") if we_are_translated(): flags = [options[flag] for flag in sys_flags] sys.flags = type(sys.flags)(flags) sys.py3kwarning = bool(sys.flags.py3k_warning) sys.dont_write_bytecode = bool(sys.flags.dont_write_bytecode) if sys.flags.optimize >= 1: import __pypy__ __pypy__.set_debug(False) if sys.py3kwarning: print >> sys.stderr, ( "Warning: pypy does not implement py3k warnings") if os.getenv('PYTHONFAULTHANDLER'): run_faulthandler() ## if not we_are_translated(): ## for key in sorted(options): ## print '%40s: %s' % (key, options[key]) ## print '%40s: %s' % ("sys.argv", sys.argv) return options
def parse_command_line(argv): import os options = default_options.copy() options['warnoptions'] = [] iterargv = iter(argv) argv = None for arg in iterargv: # # If the next argument isn't at least two characters long or # doesn't start with '-', stop processing if len(arg) < 2 or arg[0] != '-': if IS_WINDOWS and arg == '/?': # special case print_help() argv = [arg] + list(iterargv) # finishes processing # # If the next argument is directly in cmdline_options, handle # it as a single argument elif arg in cmdline_options: argv = handle_argument(arg, options, iterargv) # # Else interpret the rest of the argument character by character else: iterarg = iter(arg) iterarg.next() # skip the '-' for c in iterarg: if c not in cmdline_options: raise CommandLineError('Unknown option: -%s' % (c,)) argv = handle_argument(c, options, iterargv, iterarg) if not argv: argv = [''] options["run_stdin"] = True elif argv[0] == '-': options["run_stdin"] = True # don't change the list that sys.argv is bound to # (relevant in case of "reload(sys)") sys.argv[:] = argv if not options["ignore_environment"]: parse_env('PYTHONDEBUG', "debug", options) if os.getenv('PYTHONDONTWRITEBYTECODE'): options["dont_write_bytecode"] = 1 if os.getenv('PYTHONNOUSERSITE'): options["no_user_site"] = 1 if os.getenv('PYTHONUNBUFFERED'): options["unbuffered"] = 1 parse_env('PYTHONVERBOSE', "verbose", options) parse_env('PYTHONOPTIMIZE', "optimize", options) if (options["interactive"] or (not options["ignore_environment"] and os.getenv('PYTHONINSPECT'))): options["inspect"] = 1 ## We don't print the warning, because it offers no additional security ## in CPython either (http://bugs.python.org/issue14621) ## if (options["hash_randomization"] or os.getenv('PYTHONHASHSEED')): ## print >> sys.stderr, ( ## "Warning: pypy does not implement hash randomization") if we_are_translated(): flags = [options[flag] for flag in sys_flags] sys.flags = type(sys.flags)(flags) sys.py3kwarning = bool(sys.flags.py3k_warning) sys.dont_write_bytecode = bool(sys.flags.dont_write_bytecode) if sys.flags.optimize >= 1: import __pypy__ __pypy__.set_debug(False) if sys.py3kwarning: print >> sys.stderr, ( "Warning: pypy does not implement py3k warnings") if os.getenv('PYTHONFAULTHANDLER'): run_faulthandler() ## if not we_are_translated(): ## for key in sorted(options): ## print '%40s: %s' % (key, options[key]) ## print '%40s: %s' % ("sys.argv", sys.argv) return options