classification
Title: python -mtrace --help is wrong
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.6
process
Status: closed Resolution: out of date
Dependencies: Superseder: trace module: convert to argparse
View: 22642
Assigned To: Nosy List: Antony.Lee, Evan Hubinger, SilentGhost, belopolsky
Priority: normal Keywords: easy, patch

Created on 2015-07-16 22:43 by Antony.Lee, last changed 2016-01-12 10:17 by SilentGhost. This issue is now closed.

Files
File name Uploaded Description Edit
issue24649.patch Evan Hubinger, 2015-08-04 20:55 review
Messages (4)
msg246834 - (view) Author: Antony Lee (Antony.Lee) * Date: 2015-07-16 22:43
While working on #24644, I noticed that the help for python -mtrace is quite wrong.

$ python -mtrace --help
Usage: /usr/lib/python3.4/trace.py [OPTIONS] <file> [ARGS]

Meta-options:
--help                Display this help then exit.
--version             Output version information then exit.

Otherwise, exactly one of the following three options must be given:
-t, --trace           Print each line to sys.stdout before it is executed.
-c, --count           Count the number of times each line is executed
                      and write the counts to <module>.cover for each
                      module executed, in the module's directory.
                      See also `--coverdir', `--file', `--no-report' below.
-l, --listfuncs       Keep track of which functions are executed at least
                      once and write the results to sys.stdout after the
                      program exits.
-T, --trackcalls      Keep track of caller/called pairs and write the
                      results to sys.stdout after the program exits.
-r, --report          Generate a report from a counts file; do not execute
                      any code.  `--file' must specify the results file to
                      read, which must have been created in a previous run
                      with `--count --file=FILE'.

<elided modifier flags>

1. Obviously, there are more than 3 options there.
2. Simple testing suggests that it is at least possible to pass both -t and -c simultaneously.  I haven't tested other combinations.
msg246952 - (view) Author: Alexander Belopolsky (belopolsky) * (Python committer) Date: 2015-07-20 01:39
Maybe it is time to rewrite trace module argument parser using argparse
and get an "always correct" auto-generated help for free?
msg248003 - (view) Author: Evan Hubinger (Evan Hubinger) * Date: 2015-08-04 20:55
Added a patch that clears up the incorrect help. It now accurately reflects the only constraints that the code actually puts on the arguments:

    if listfuncs and (count or trace):
        _err_exit("cannot specify both --listfuncs and (--trace or --count)")

    if not (count or trace or report or listfuncs or countcallers):
        _err_exit("must specify one of --trace, --count, --report, "
                  "--listfuncs, or --trackcalls")

To reflect both of those constraints, and only those constraints, the part of the help message in question now reads:

Otherwise, at least one of the following options must be given:
-t, --trace           Print each line to sys.stdout before it is executed.
-c, --count           Count the number of times each line is executed
                      and write the counts to <module>.cover for each
                      module executed, in the module's directory.
                      See also `--coverdir', `--file', `--no-report' below.
-l, --listfuncs       Keep track of which functions are executed at least
                      once and write the results to sys.stdout after the
                      program exits. Cannot be specified alongside `--trace`
                      or `--count`.
-T, --trackcalls      Keep track of caller/called pairs and write the
                      results to sys.stdout after the program exits.
-r, --report          Generate a report from a counts file; do not execute
                      any code.  `--file' must specify the results file to
                      read, which must have been created in a previous run
                      with `--count --file=FILE'.
msg258098 - (view) Author: SilentGhost (SilentGhost) * (Python triager) Date: 2016-01-12 10:17
A re-write using argparse is submitted in the issue22642, that's why I'm closing this issue. Changes from Evan's patch were incorporated in the submitted patch there.
History
Date User Action Args
2016-01-12 10:17:07SilentGhostsetstatus: open -> closed

superseder: trace module: convert to argparse
nosy: + SilentGhost

messages: + msg258098
type: behavior
resolution: out of date
stage: needs patch -> resolved
2015-08-04 20:55:27Evan Hubingersetfiles: + issue24649.patch

nosy: + Evan Hubinger
messages: + msg248003

keywords: + patch
2015-07-20 01:39:08belopolskysetkeywords: + easy

stage: needs patch
messages: + msg246952
versions: + Python 3.6, - Python 3.5
2015-07-17 18:09:16terry.reedysetnosy: + belopolsky
2015-07-16 22:43:05Antony.Leecreate