Source code for pywikibot.scripts.shell

#!/usr/bin/env python3
"""Spawns an interactive Python shell and imports the pywikibot library.

To exit the shell, type :kbd:`ctrl-D` (Linux) or :kbd:`ctrl-Z` (Windows)
or use the :func:`exit` function.

The following local option is supported::

 -noimport Do not import the pywikibot library. All other arguments are
           ignored in this case.

Usage::

    python pwb.py shell [args]

.. versionchanged:: 7.0
   moved to pywikibot.scripts
"""
# (C) Pywikibot team, 2014-2024
#
# Distributed under the terms of the MIT license.
#
from __future__ import annotations

import code
import sys


[docs] def main(*args: str) -> None: """Script entry point. .. versionchanged:: 8.2 *exitmsg* was added for :func:`code.interact`. """ args = list(args) if '-noimport' in args: args.remove('-noimport') env = None warn_type = 'Ignoring' else: import pywikibot args = pywikibot.handle_args(args) env = {'pywikibot': pywikibot} warn_type = 'Unknown' if args: print('{} arguments: {}\n' # noqa: T201 .format(warn_type, ', '.join(args))) # Various stuffs in Python 3.4+, such as history file. # This is defined in the site module of the Python Standard Library, # and usually called by the built-in CPython interactive shell. if hasattr(sys, '__interactivehook__'): sys.__interactivehook__() code.interact('Welcome to the Pywikibot interactive shell!', local=env, exitmsg='Thank you for using Pywikibot; exiting now...\n')
if __name__ == '__main__': if sys.platform == 'win32': import platform import subprocess subprocess.run(f'title Python {platform.python_version()} Shell', shell=True, check=True) del subprocess del platform args = [] if sys.argv and sys.argv[0].endswith(('shell', 'shell.py')): args = sys.argv[1:] main(*args)