Issue 18299: Change script_helper to use universal_newlines=True in _assert_python (original) (raw)

Created on 2013-06-25 12:31 by r.david.murray, last changed 2022-04-11 14:57 by admin.

Pull Requests
URL Status Linked Edit
PR 13847 closed shihai1991,2019-06-05 17:11
PR 13908 closed shihai1991,2019-06-08 06:54
Messages (9)
msg191854 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2013-06-25 12:31
A look at a random selection of tests that use script_helper indicates that using universal_newlines=True would either simplify or make no difference to the usage of the script_helper assert_python functions in the majority of the tests that use it. Even if there turn out to be a few uses where having bytes is required, it would probably be worth catering to the common case and making those exceptional cases use Popen directly. (Or alternatively provide assert_python_xxx_binary helpers.)
msg228595 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2014-10-05 17:35
Just a gentle reminder guys.
msg293762 - (view) Author: Pranav Deshpande (Pranav Deshpande) Date: 2017-05-16 13:22
Hello, I would like to work on this issue. Could you guide me on so as how to proceed with this?
msg293792 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2017-05-16 21:20
I really hate script_helper API: keyword arguments are only used to pass environment variables, so the function uses hackish parameteres like __cleanenv=True... I would prefer to pass keywords unchanged to Popen() to be able to use universal_newlines=True for example. Since we have +10k tests, I suggest to not touch the existing API but add yet another API: a new function in support/script_helper.py. What do you think?
msg293794 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2017-05-16 21:25
> Even if there turn out to be a few uses where having bytes is required, it would probably be worth catering to the common case and making those exceptional cases use Popen directly. (Or alternatively provide assert_python_xxx_binary helpers.) I would prefer the opposite: *always* use script_helper rather than Popen() directly in tests. We have to check why some tests use directly Popen? I know that in test_faulthandler for example, I chose to use directly Popen because script_helper always enable faulthandler, there is no option to disable this behaviour, and as I wrote in my previous comment, it's a pain to extend the API (I don't want to use yet another __xxx custom keyword). Maybe we need differently API levels in script helper, the lowest level would return a Popen object but add -I, -E and/or -X faulthandler. By the way, I'm using more and more functions like the one I added to Lib/test/eintrdata/eintr_tester.py: @contextlib.contextmanager def kill_on_error(proc): """Context manager killing the subprocess if a Python exception is raised.""" with proc: try: yield proc except: proc.kill() raise Such helper should also be moved to script_helper. For examle, in my perf project I have these two helper functions: @contextlib.contextmanager def popen_killer(proc): try: yield except: # Close pipes if proc.stdin: proc.stdin.close() if proc.stdout: proc.stdout.close() if proc.stderr: proc.stderr.close() try: proc.kill() except OSError: # process already terminated pass proc.wait() raise def popen_communicate(proc): with popen_killer(proc): return proc.communicate() Or maybe we should add back these features directly into the subprocess module?
msg293963 - (view) Author: Pranav Deshpande (Pranav Deshpande) Date: 2017-05-19 18:07
I am afraid I didn't make myself clear. I am a beginner when it comes to open source contribution and have decided to take up this issue. I did some basic research about the issue and found this file: cpython/Lib/test/support/script_helper.py The function _assert_python calls run_python_until_end which calls subprocess.Popen which takes the parameter universal_newlines=True. That is all I could discover. Could you guide me further regarding this?
msg344748 - (view) Author: Hai Shi (shihai1991) * (Python triager) Date: 2019-06-05 16:51
>it's a pain to extend the API (I don't want to use yet another __xxx custom keyword) Adding __xxx in run_python_until_end function would increase the complexity but it looks like a unified function.
msg344975 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2019-06-07 17:30
I dislike script_helper API. I doesn't allow to pass arbitrary keyword parameters to subprocess.Popen. IMHO a new API should be added, but I didn't check if script_helper already contains such API or not.
msg345489 - (view) Author: Hai Shi (shihai1991) * (Python triager) Date: 2019-06-13 09:51
spawn_python in script_helper is good enough, so this bug looks like cloud be closed.
History
Date User Action Args
2022-04-11 14:57:47 admin set github: 62499
2019-06-23 14🔞12 shihai1991 set nosy: - shihai1991
2019-06-13 12:09:00 vstinner set nosy: - vstinner
2019-06-13 09:51:07 shihai1991 set messages: +
2019-06-08 06:54:15 shihai1991 set pull_requests: + <pull%5Frequest13781>
2019-06-07 17:30:31 vstinner set messages: +
2019-06-05 17:11:49 shihai1991 set keywords: + patchstage: needs patch -> patch reviewpull_requests: + <pull%5Frequest13724>
2019-06-05 16:51:37 shihai1991 set nosy: + shihai1991messages: +
2019-02-24 21:05:18 ceronman set nosy: + ceronman
2017-05-19 18:07:51 Pranav Deshpande set messages: +
2017-05-17 10:57:08 BreamoreBoy set nosy: - BreamoreBoy
2017-05-16 21:25:39 vstinner set messages: +
2017-05-16 21:20:14 vstinner set nosy: + vstinnermessages: +
2017-05-16 13:22:11 Pranav Deshpande set nosy: + Pranav Deshpandemessages: +
2014-10-05 17:35:09 BreamoreBoy set nosy: + BreamoreBoymessages: + versions: + Python 3.5, - Python 3.4
2013-06-25 12:40:56 barry set nosy: + barry
2013-06-25 12:31:30 r.david.murray create