https://github.com/python/cpython/commit/b3e8c78ed7aa9bbd1084375587b99200c687cec9
commit: b3e8c78ed7aa9bbd1084375587b99200c687cec9
branch: main
author: Tian Gao <[email protected]>
committer: iritkatriel <[email protected]>
date: 2024-03-27T01:20:12Z
summary:
gh-113548: Allow CLI arguments to `pdb -m` (#113557)
files:
A Misc/NEWS.d/next/Library/2023-12-28-22-52-45.gh-issue-113548.j6TJ7O.rst
M Lib/pdb.py
M Lib/test/test_pdb.py
diff --git a/Lib/pdb.py b/Lib/pdb.py
index f8f42ddcdb2b20..f80171d172b23e 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -2250,15 +2250,19 @@ def main():
import argparse
parser = argparse.ArgumentParser(prog="pdb",
+ usage="%(prog)s [-h] [-c command] (-m
module | pyfile) [args ...]",
description=_usage,
formatter_class=argparse.RawDescriptionHelpFormatter,
allow_abbrev=False)
- parser.add_argument('-c', '--command', action='append', default=[],
metavar='command')
- group = parser.add_mutually_exclusive_group(required=True)
- group.add_argument('-m', metavar='module')
- group.add_argument('pyfile', nargs='?')
- parser.add_argument('args', nargs="*")
+ # We need to maunally get the script from args, because the first
positional
+ # arguments could be either the script we need to debug, or the argument
+ # to the -m module
+ parser.add_argument('-c', '--command', action='append', default=[],
metavar='command', dest='commands',
+ 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 no arguments were given (python -m pdb), print the whole help
message.
@@ -2268,11 +2272,13 @@ def main():
opts = parser.parse_args()
- if opts.m:
- file = opts.m
+ if opts.module:
+ file = opts.module
target = _ModuleTarget(file)
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.check()
@@ -2284,7 +2290,7 @@ def main():
# changed by the user from the command line. There is a "restart" command
# which allows explicit specification of command line arguments.
pdb = Pdb()
- pdb.rcLines.extend(opts.command)
+ pdb.rcLines.extend(opts.commands)
while True:
try:
pdb._run(target)
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index 9ee994e3fe309d..eedbcec1e66dcb 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -3057,6 +3057,15 @@ def test_module_is_run_as_main(self):
stdout, stderr = self.run_pdb_module(script, commands)
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):
script = """
if __name__ == '__main__':
diff --git
a/Misc/NEWS.d/next/Library/2023-12-28-22-52-45.gh-issue-113548.j6TJ7O.rst
b/Misc/NEWS.d/next/Library/2023-12-28-22-52-45.gh-issue-113548.j6TJ7O.rst
new file mode 100644
index 00000000000000..972ddeb54822e2
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-12-28-22-52-45.gh-issue-113548.j6TJ7O.rst
@@ -0,0 +1 @@
+:mod:`pdb` now allows CLI arguments to ``pdb -m``.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]