Commit b08e6911 authored by Florent Xicluna's avatar Florent Xicluna

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)
........
parent a1b2c803
...@@ -36,7 +36,7 @@ def run(statement, filename=None, sort=-1): ...@@ -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): ...@@ -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(): ...@@ -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(): ...@@ -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): ...@@ -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): ...@@ -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(): ...@@ -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):
sys.argv[:] = args 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
......
...@@ -1501,7 +1501,13 @@ class _ExpectedSkips: ...@@ -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 ...@@ -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,8 +343,11 @@ Build ...@@ -340,8 +343,11 @@ 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.
- Issue #8857: Provide a test case for socket.getaddrinfo. - Issue #8857: Provide a test case for socket.getaddrinfo.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment