Create a :class:`~pstats.Stats` object based on the current
profile and print the results to stdout.
+ The *sort* parameter specifies the sorting order of the displayed
+ statistics. It accepts a single key or a tuple of keys to enable
+ multi-level sorting, as in :func:`Stats.sort_stats <pstats.Stats.sort_stats>`.
+
+ .. versionadded:: 3.13
+ :meth:`~Profile.print_stats` now accepts a tuple of keys.
+
.. method:: dump_stats(filename)
Write the results of the current profile to *filename*.
def print_stats(self, sort=-1):
import pstats
- pstats.Stats(self).strip_dirs().sort_stats(sort).print_stats()
+ if not isinstance(sort, tuple):
+ sort = (sort,)
+ pstats.Stats(self).strip_dirs().sort_stats(*sort).print_stats()
def dump_stats(self, file):
import marshal
def print_stats(self, sort=-1):
import pstats
- pstats.Stats(self).strip_dirs().sort_stats(sort). \
- print_stats()
+ if not isinstance(sort, tuple):
+ sort = (sort,)
+ pstats.Stats(self).strip_dirs().sort_stats(*sort).print_stats()
def dump_stats(self, file):
with open(file, 'wb') as f:
from difflib import unified_diff
from io import StringIO
from test.support.os_helper import TESTFN, unlink, temp_dir, change_cwd
-from contextlib import contextmanager
+from contextlib import contextmanager, redirect_stdout
import profile
from test.profilee import testfunc, timer
self.profilermodule.run("int('1')", filename=TESTFN)
self.assertTrue(os.path.exists(TESTFN))
+ def test_run_with_sort_by_values(self):
+ with redirect_stdout(StringIO()) as f:
+ self.profilermodule.run("int('1')", sort=('tottime', 'stdname'))
+ self.assertIn("Ordered by: internal time, standard name", f.getvalue())
+
def test_runctx(self):
with silent():
self.profilermodule.runctx("testfunc()", globals(), locals())
--- /dev/null
+:meth:`Profile.print_stats` has been improved to accept multiple sort arguments. Patched by Chiu-Hsiang Hsu and Furkan Onder.