gh-113548: Allow CLI arguments to pdb -m (#113557)

This commit is contained in:
Tian Gao 2024-03-26 18:20:12 -07:00 committed by GitHub
parent 48c0b05cf0
commit b3e8c78ed7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 25 additions and 9 deletions

View file

@ -2250,15 +2250,19 @@ def main():
import argparse import argparse
parser = argparse.ArgumentParser(prog="pdb", parser = argparse.ArgumentParser(prog="pdb",
usage="%(prog)s [-h] [-c command] (-m module | pyfile) [args ...]",
description=_usage, description=_usage,
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
allow_abbrev=False) allow_abbrev=False)
parser.add_argument('-c', '--command', action='append', default=[], metavar='command') # We need to maunally get the script from args, because the first positional
group = parser.add_mutually_exclusive_group(required=True) # arguments could be either the script we need to debug, or the argument
group.add_argument('-m', metavar='module') # to the -m module
group.add_argument('pyfile', nargs='?') parser.add_argument('-c', '--command', action='append', default=[], metavar='command', dest='commands',
parser.add_argument('args', nargs="*") help='pdb commands to execute as if given in a .pdbrc file')
parser.add_argument('-m', metavar='module', dest='module')
parser.add_argument('args', nargs='*',
help="when -m is not specified, the first arg is the script to debug")
if len(sys.argv) == 1: if len(sys.argv) == 1:
# If no arguments were given (python -m pdb), print the whole help message. # If no arguments were given (python -m pdb), print the whole help message.
@ -2268,11 +2272,13 @@ def main():
opts = parser.parse_args() opts = parser.parse_args()
if opts.m: if opts.module:
file = opts.m file = opts.module
target = _ModuleTarget(file) target = _ModuleTarget(file)
else: else:
file = opts.pyfile if not opts.args:
parser.error("no module or script to run")
file = opts.args.pop(0)
target = _ScriptTarget(file) target = _ScriptTarget(file)
target.check() target.check()
@ -2284,7 +2290,7 @@ def main():
# changed by the user from the command line. There is a "restart" command # changed by the user from the command line. There is a "restart" command
# which allows explicit specification of command line arguments. # which allows explicit specification of command line arguments.
pdb = Pdb() pdb = Pdb()
pdb.rcLines.extend(opts.command) pdb.rcLines.extend(opts.commands)
while True: while True:
try: try:
pdb._run(target) pdb._run(target)

View file

@ -3057,6 +3057,15 @@ def bœr():
stdout, stderr = self.run_pdb_module(script, commands) stdout, stderr = self.run_pdb_module(script, commands)
self.assertTrue(any("SUCCESS" in l for l in stdout.splitlines()), stdout) self.assertTrue(any("SUCCESS" in l for l in stdout.splitlines()), stdout)
def test_run_module_with_args(self):
commands = """
continue
"""
self._run_pdb(["calendar", "-m"], commands, expected_returncode=2)
stdout, _ = self._run_pdb(["-m", "calendar", "1"], commands)
self.assertIn("December", stdout)
def test_breakpoint(self): def test_breakpoint(self):
script = """ script = """
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -0,0 +1 @@
:mod:`pdb` now allows CLI arguments to ``pdb -m``.