Merged revisions 83524,84776 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r83524 | georg.brandl | 2010-08-02 14:20:23 +0200 (lun., 02 août 2010) | 1 line #9428: fix running scripts from profile/cProfile with their own name and the right namespace. Same fix as for trace.py in #1690103. ........ r84776 | florent.xicluna | 2010-09-13 18:35:02 +0200 (lun., 13 sept. 2010) | 1 line Make test.regrtest.__file__ absolute, this was not always the case when running profile or trace, for example. (issue #9323) ........
This commit is contained in:
parent
9d407ca9da
commit
928474561c
|
@ -36,7 +36,7 @@ def run(statement, filename=None, sort=-1):
|
||||||
result = prof.print_stats(sort)
|
result = prof.print_stats(sort)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def runctx(statement, globals, locals, filename=None):
|
def runctx(statement, globals, locals, filename=None, sort=-1):
|
||||||
"""Run statement under profiler, supplying your own globals and locals,
|
"""Run statement under profiler, supplying your own globals and locals,
|
||||||
optionally saving results in filename.
|
optionally saving results in filename.
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ def runctx(statement, globals, locals, filename=None):
|
||||||
if filename is not None:
|
if filename is not None:
|
||||||
prof.dump_stats(filename)
|
prof.dump_stats(filename)
|
||||||
else:
|
else:
|
||||||
result = prof.print_stats()
|
result = prof.print_stats(sort)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
# Backwards compatibility.
|
# Backwards compatibility.
|
||||||
|
@ -169,7 +169,8 @@ def main():
|
||||||
parser.add_option('-o', '--outfile', dest="outfile",
|
parser.add_option('-o', '--outfile', dest="outfile",
|
||||||
help="Save stats to <outfile>", default=None)
|
help="Save stats to <outfile>", default=None)
|
||||||
parser.add_option('-s', '--sort', dest="sort",
|
parser.add_option('-s', '--sort', dest="sort",
|
||||||
help="Sort order when printing to stdout, based on pstats.Stats class", default=-1)
|
help="Sort order when printing to stdout, based on pstats.Stats class",
|
||||||
|
default=-1)
|
||||||
|
|
||||||
if not sys.argv[1:]:
|
if not sys.argv[1:]:
|
||||||
parser.print_usage()
|
parser.print_usage()
|
||||||
|
@ -178,9 +179,17 @@ def main():
|
||||||
(options, args) = parser.parse_args()
|
(options, args) = parser.parse_args()
|
||||||
sys.argv[:] = args
|
sys.argv[:] = args
|
||||||
|
|
||||||
if (len(sys.argv) > 0):
|
if len(args) > 0:
|
||||||
sys.path.insert(0, os.path.dirname(sys.argv[0]))
|
progname = args[0]
|
||||||
run('execfile(%r)' % (sys.argv[0],), options.outfile, options.sort)
|
sys.path.insert(0, os.path.dirname(progname))
|
||||||
|
with open(progname, 'rb') as fp:
|
||||||
|
code = compile(fp.read(), progname, 'exec')
|
||||||
|
globs = {
|
||||||
|
'__file__': progname,
|
||||||
|
'__name__': '__main__',
|
||||||
|
'__package__': None,
|
||||||
|
}
|
||||||
|
runctx(code, globs, None, options.outfile, options.sort)
|
||||||
else:
|
else:
|
||||||
parser.print_usage()
|
parser.print_usage()
|
||||||
return parser
|
return parser
|
||||||
|
|
|
@ -75,7 +75,7 @@ def run(statement, filename=None, sort=-1):
|
||||||
else:
|
else:
|
||||||
return prof.print_stats(sort)
|
return prof.print_stats(sort)
|
||||||
|
|
||||||
def runctx(statement, globals, locals, filename=None):
|
def runctx(statement, globals, locals, filename=None, sort=-1):
|
||||||
"""Run statement under profiler, supplying your own globals and locals,
|
"""Run statement under profiler, supplying your own globals and locals,
|
||||||
optionally saving results in filename.
|
optionally saving results in filename.
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ def runctx(statement, globals, locals, filename=None):
|
||||||
if filename is not None:
|
if filename is not None:
|
||||||
prof.dump_stats(filename)
|
prof.dump_stats(filename)
|
||||||
else:
|
else:
|
||||||
return prof.print_stats()
|
return prof.print_stats(sort)
|
||||||
|
|
||||||
# Backwards compatibility.
|
# Backwards compatibility.
|
||||||
def help():
|
def help():
|
||||||
|
@ -589,18 +589,27 @@ def main():
|
||||||
parser.add_option('-o', '--outfile', dest="outfile",
|
parser.add_option('-o', '--outfile', dest="outfile",
|
||||||
help="Save stats to <outfile>", default=None)
|
help="Save stats to <outfile>", default=None)
|
||||||
parser.add_option('-s', '--sort', dest="sort",
|
parser.add_option('-s', '--sort', dest="sort",
|
||||||
help="Sort order when printing to stdout, based on pstats.Stats class", default=-1)
|
help="Sort order when printing to stdout, based on pstats.Stats class",
|
||||||
|
default=-1)
|
||||||
|
|
||||||
if not sys.argv[1:]:
|
if not sys.argv[1:]:
|
||||||
parser.print_usage()
|
parser.print_usage()
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
(options, args) = parser.parse_args()
|
(options, args) = parser.parse_args()
|
||||||
|
sys.argv[:] = args
|
||||||
|
|
||||||
if (len(args) > 0):
|
if len(args) > 0:
|
||||||
sys.argv[:] = args
|
progname = args[0]
|
||||||
sys.path.insert(0, os.path.dirname(sys.argv[0]))
|
sys.path.insert(0, os.path.dirname(progname))
|
||||||
run('execfile(%r)' % (sys.argv[0],), options.outfile, options.sort)
|
with open(progname, 'rb') as fp:
|
||||||
|
code = compile(fp.read(), progname, 'exec')
|
||||||
|
globs = {
|
||||||
|
'__file__': progname,
|
||||||
|
'__name__': '__main__',
|
||||||
|
'__package__': None,
|
||||||
|
}
|
||||||
|
runctx(code, globs, None, options.outfile, options.sort)
|
||||||
else:
|
else:
|
||||||
parser.print_usage()
|
parser.print_usage()
|
||||||
return parser
|
return parser
|
||||||
|
|
|
@ -1501,7 +1501,13 @@ class _ExpectedSkips:
|
||||||
return self.expected
|
return self.expected
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# Simplification for findtestdir().
|
# findtestdir() gets the dirname out of __file__, so we have to make it
|
||||||
|
# absolute before changing the working directory.
|
||||||
|
# For example __file__ may be relative when running trace or profile.
|
||||||
|
# See issue #9323.
|
||||||
|
__file__ = os.path.abspath(__file__)
|
||||||
|
|
||||||
|
# sanity check
|
||||||
assert __file__ == os.path.abspath(sys.argv[0])
|
assert __file__ == os.path.abspath(sys.argv[0])
|
||||||
|
|
||||||
# When tests are run from the Python build directory, it is best practice
|
# When tests are run from the Python build directory, it is best practice
|
||||||
|
|
|
@ -151,6 +151,9 @@ Library
|
||||||
|
|
||||||
- Issue #9354: Provide getsockopt() in asyncore's file_wrapper.
|
- Issue #9354: Provide getsockopt() in asyncore's file_wrapper.
|
||||||
|
|
||||||
|
- Issue #9428: Fix running scripts with the profile/cProfile modules from
|
||||||
|
the command line.
|
||||||
|
|
||||||
- Issue #7781: Fix restricting stats by entry counts in the pstats
|
- Issue #7781: Fix restricting stats by entry counts in the pstats
|
||||||
interactive browser.
|
interactive browser.
|
||||||
|
|
||||||
|
@ -340,6 +343,9 @@ Build
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #9323: Make test.regrtest.__file__ absolute, this was not always the
|
||||||
|
case when running profile or trace, for example.
|
||||||
|
|
||||||
- Issue #9315: Added tests for the trace module. Patch by Eli Bendersky.
|
- Issue #9315: Added tests for the trace module. Patch by Eli Bendersky.
|
||||||
|
|
||||||
- Strengthen test_unicode with explicit type checking for assertEqual tests.
|
- Strengthen test_unicode with explicit type checking for assertEqual tests.
|
||||||
|
|
Loading…
Reference in New Issue