bpo-40492: Fix --outfile with relative path when the program changes it working dir (GH-19910)
This commit is contained in:
parent
b81c833ab5
commit
3c0ac18504
|
@ -152,6 +152,11 @@ def main():
|
||||||
(options, args) = parser.parse_args()
|
(options, args) = parser.parse_args()
|
||||||
sys.argv[:] = args
|
sys.argv[:] = args
|
||||||
|
|
||||||
|
# The script that we're profiling may chdir, so capture the absolute path
|
||||||
|
# to the output file at startup.
|
||||||
|
if options.outfile is not None:
|
||||||
|
options.outfile = os.path.abspath(options.outfile)
|
||||||
|
|
||||||
if len(args) > 0:
|
if len(args) > 0:
|
||||||
if options.module:
|
if options.module:
|
||||||
code = "run_module(modname, run_name='__main__')"
|
code = "run_module(modname, run_name='__main__')"
|
||||||
|
|
|
@ -571,6 +571,11 @@ def main():
|
||||||
(options, args) = parser.parse_args()
|
(options, args) = parser.parse_args()
|
||||||
sys.argv[:] = args
|
sys.argv[:] = args
|
||||||
|
|
||||||
|
# The script that we're profiling may chdir, so capture the absolute path
|
||||||
|
# to the output file at startup.
|
||||||
|
if options.outfile is not None:
|
||||||
|
options.outfile = os.path.abspath(options.outfile)
|
||||||
|
|
||||||
if len(args) > 0:
|
if len(args) > 0:
|
||||||
if options.module:
|
if options.module:
|
||||||
import runpy
|
import runpy
|
||||||
|
|
|
@ -7,7 +7,7 @@ import os
|
||||||
from difflib import unified_diff
|
from difflib import unified_diff
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from test.support import run_unittest
|
from test.support import run_unittest
|
||||||
from test.support.os_helper import TESTFN, unlink
|
from test.support.os_helper import TESTFN, unlink, temp_dir, change_cwd
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
|
||||||
import profile
|
import profile
|
||||||
|
@ -112,6 +112,20 @@ class ProfileTest(unittest.TestCase):
|
||||||
assert_python_ok('-m', self.profilermodule.__name__,
|
assert_python_ok('-m', self.profilermodule.__name__,
|
||||||
'-m', 'timeit', '-n', '1')
|
'-m', 'timeit', '-n', '1')
|
||||||
|
|
||||||
|
def test_output_file_when_changing_directory(self):
|
||||||
|
with temp_dir() as tmpdir, change_cwd(tmpdir):
|
||||||
|
os.mkdir('dest')
|
||||||
|
with open('demo.py', 'w') as f:
|
||||||
|
f.write('import os; os.chdir("dest")')
|
||||||
|
|
||||||
|
assert_python_ok(
|
||||||
|
'-m', self.profilermodule.__name__,
|
||||||
|
'-o', 'out.pstats',
|
||||||
|
'demo.py',
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertTrue(os.path.exists('out.pstats'))
|
||||||
|
|
||||||
|
|
||||||
def regenerate_expected_output(filename, cls):
|
def regenerate_expected_output(filename, cls):
|
||||||
filename = filename.rstrip('co')
|
filename = filename.rstrip('co')
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Fix ``--outfile`` for :mod:`cProfile` / :mod:`profile` not writing the output
|
||||||
|
file in the original directory when the program being profiled changes the
|
||||||
|
working directory. PR by Anthony Sottile.
|
Loading…
Reference in New Issue