René's URL Explorer Experiment


Title: bpo-25942: Added new parameter to subprocess.run(): cleanup_timeout by stuarteberg · Pull Request #4283 · python/cpython · GitHub

Open Graph Title: bpo-25942: Added new parameter to subprocess.run(): cleanup_timeout by stuarteberg · Pull Request #4283 · python/cpython

X Title: bpo-25942: Added new parameter to subprocess.run(): cleanup_timeout by stuarteberg · Pull Request #4283 · python/cpython

Description: EDIT: This PR was ultimately superseded by #5026 Summary: subprocess.call() (and now also subprocess.run()) behave badly in the event of SIGINT, i.e. a user hitting Ctrl+C while the subprocess is running. This was first reported by @pilcrow in [bpo-25942]1. Several possible solutions were discussed (by @vadmium, @pilcrow, and @Haypo), but no action was taken. Among them was this suggestion from @Haypo: If you really want to give time to the child process, I suggest to add a new optional parameter . For example ctrlc_timeout=5.0 IMHO, that is the best option, and certainly much better than the status quo. I've implemented that solution in this PR. (It is also similar to a proposal by @vadmium in that thread.) Background: POSIX behavior for Ctrl+C In general, when the user hits Ctrl+C, the OS sends SIGINT to all processes in the foreground process group, including any child processes launched via subprocess call(). That is, both Python and it's child will automatically see the SIGINT; there is no need to explicitly send a duplicate SIGINT to the child. What this PR does: Upon receiving the SIGINT in the form of a KeyboardInterrupt, call() will wait again for the child process, but with cleanup_timeout, giving the child process time to perform cleanup actions. If that timeout expires, then the child process is killed. (Alternatively, during this time, the user can hit Ctrl+C again to immediately stop waiting and kill the child process.) What this PR does not do: This PR attempts to make subprocess.call() behave in a less surprising manner in the context of interactive terminal applications, in which the user is likely to expect Ctrl+C to work properly. If the child process does not handle SIGINT properly, we make no attempt to kill it via alternative means, such as SIGTERM. If the developer needs such control over how the child is to be killed in the event of a KeyboardInterrupt, she should use the Popen API directly instead of calling subprocess.call() or run(). Open question 1: It is not entirely clear what the default value of cleanup_timeout should be. Setting it to 0 by default seems to defeat the purpose and wouldn't help naïve users write code that "just works". On the other hand, setting it to an arbitrary value like 5.0 seems... arbitrary. If the cleanup takes a long time, then we'd be killing it too soon. But if the child doesn't handle SIGINT anyway, then we'd be wasting 5 seconds for no reason (unless the user hits Ctrl+C a second time). For now, I've set the default value as follows: If timeout was specified, use that. The child cleanup time must be less than its total expected runtime. If timeout was not specified, then use 1.0. If the child process handles SIGINT, this introduces no extra delay. If it does not handle SIGINT, then 1 second seems like a reasonable delay for what is likely a rare event an interactive console application. Open question 2: According to the docs, subprocess.call() is equivalent to subprocess.run().returncode. Yet, these are currently implemented as independent functions (and I left it that way). Is there any objection to replacing subprocess.call() with the following? def call(*popenargs, timeout=None, cleanup_timeout=None, **kwargs): return run(*popenargs, timeout=timeout, cleanup_timeout=cleanup_timeout, **kwargs).returncode (That would also allow me to remove the mostly duplicated test code in this PR.) https://bugs.python.org/issue25942

Open Graph Description: EDIT: This PR was ultimately superseded by #5026 Summary: subprocess.call() (and now also subprocess.run()) behave badly in the event of SIGINT, i.e. a user hitting Ctrl+C while the subprocess is ...

X Description: EDIT: This PR was ultimately superseded by #5026 Summary: subprocess.call() (and now also subprocess.run()) behave badly in the event of SIGINT, i.e. a user hitting Ctrl+C while the subprocess is ...

Opengraph URL: https://github.com/python/cpython/pull/4283

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:580f1a0e-88be-3eed-fae2-f7d7e25a516b
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idB636:14473:645A91:89F3B3:6A58520C
html-safe-noncef9c0158991f586c6da9ed158d13b62f603cb8a2e6fabc28bc3f3f570b380248c
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCNjM2OjE0NDczOjY0NUE5MTo4OUYzQjM6NkE1ODUyMEMiLCJ2aXNpdG9yX2lkIjoiODI1ODQyMjc1ODQ0ODg0NTMyNSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac290e9aa7394596a84c79c63d7d7fa310d302b2414b3bf5869ddaedfc88d8b60a
hovercard-subject-tagpull_request:150699553
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/python/cpython/pull/4283/files
twitter:imagehttps://avatars.githubusercontent.com/u/1655821?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/1655821?s=400&v=4
og:image:altEDIT: This PR was ultimately superseded by #5026 Summary: subprocess.call() (and now also subprocess.run()) behave badly in the event of SIGINT, i.e. a user hitting Ctrl+C while the subprocess is ...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None5f2a0c7865178af3d91dd9f13b0cdfc3c73a2529c873d2780bb4c01271a57ec6
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/python/cpython git https://github.com/python/cpython.git
octolytics-dimension-user_id1525981
octolytics-dimension-user_loginpython
octolytics-dimension-repository_id81598961
octolytics-dimension-repository_nwopython/cpython
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id81598961
octolytics-dimension-repository_network_root_nwopython/cpython
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release8aae7b8d6caacacf5c66eaeb2702d8dc88d85b4a
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/python/cpython/pull/4283/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython%2Fcpython%2Fpull%2F4283%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython%2Fcpython%2Fpull%2F4283%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=python%2Fcpython
Reloadhttps://github.com/python/cpython/pull/4283/files
Reloadhttps://github.com/python/cpython/pull/4283/files
Reloadhttps://github.com/python/cpython/pull/4283/files
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
python https://github.com/python
cpythonhttps://github.com/python/cpython
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
Notifications https://github.com/login?return_to=%2Fpython%2Fcpython
Fork 35k https://github.com/login?return_to=%2Fpython%2Fcpython
Star 73.8k https://github.com/login?return_to=%2Fpython%2Fcpython
Code https://github.com/python/cpython
Issues 5k+ https://github.com/python/cpython/issues
Pull requests 2.3k https://github.com/python/cpython/pulls
Actions https://github.com/python/cpython/actions
Projects https://github.com/python/cpython/projects
Security and quality 0 https://github.com/python/cpython/security
Insights https://github.com/python/cpython/pulse
Code https://github.com/python/cpython
Issues https://github.com/python/cpython/issues
Pull requests https://github.com/python/cpython/pulls
Actions https://github.com/python/cpython/actions
Projects https://github.com/python/cpython/projects
Security and quality https://github.com/python/cpython/security
Insights https://github.com/python/cpython/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fpython%2Fcpython%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fpython%2Fcpython%2Fissues%2Fnew%2Fchoose
stuarteberghttps://github.com/stuarteberg
python:masterhttps://github.com/python/cpython/tree/master
stuarteberg:fix-bpo-25942-subprocess-callhttps://github.com/stuarteberg/cpython/tree/fix-bpo-25942-subprocess-call
Conversation 51 https://github.com/python/cpython/pull/4283
Commits 11 https://github.com/python/cpython/pull/4283/commits
Checks 0 https://github.com/python/cpython/pull/4283/checks
Files changed https://github.com/python/cpython/pull/4283/files
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
bpo-25942: Added new parameter to subprocess.run(): cleanup_timeout https://github.com/python/cpython/pull/4283/files#top
Show all changes 11 commits https://github.com/python/cpython/pull/4283/files
d16a2e6 subprocess.call() merely calls subprocess.run() stuarteberg Nov 5, 2017 https://github.com/python/cpython/pull/4283/commits/d16a2e6643f7de043845fc9d24336cb18fef6e70
bebd8d3 bpo-25942: Added new parameter to run(): cleanup_timeout stuarteberg Nov 4, 2017 https://github.com/python/cpython/pull/4283/commits/bebd8d349a8e64dbb01172a76c0c71c3521845f8
ff62b7b subprocess.run(): Actually kill the child process if KeyboardInterrup… stuarteberg Nov 6, 2017 https://github.com/python/cpython/pull/4283/commits/ff62b7b5878eadd3f3f5879197fcb180e0951b87
f7280e0 subprocess.call(): Fix copy/paste error stuarteberg Nov 6, 2017 https://github.com/python/cpython/pull/4283/commits/f7280e00427008ec17ca5d3816b5341fabe95de9
e0d3cbe test_subprocess: Removed unused variable stuarteberg Nov 6, 2017 https://github.com/python/cpython/pull/4283/commits/e0d3cbe2af28bb24ebc065a3039258fb0167116e
d1a4dac test_subprocess: Call join() on helper thread stuarteberg Nov 6, 2017 https://github.com/python/cpython/pull/4283/commits/d1a4dac7cfd2fe990dc2410ff4980cb34979d55b
b831801 test_subprocess: Explicitly close file during cleanup test. stuarteberg Nov 6, 2017 https://github.com/python/cpython/pull/4283/commits/b83180150f5d42e2e108bb348b3ceaa21f845b7b
22b030a subprocess: Remove print() stuarteberg Nov 6, 2017 https://github.com/python/cpython/pull/4283/commits/22b030acd6ef0f367c1f7a552b9c6f1cdfc829de
2e990ea Fix whitespace formatting stuarteberg Nov 6, 2017 https://github.com/python/cpython/pull/4283/commits/2e990ea03b3395e02dc8c9d295f4efeb320922af
b797161 test_subprocess: Simulate Ctrl+C via separate SIGINT signals to paren… stuarteberg Nov 6, 2017 https://github.com/python/cpython/pull/4283/commits/b7971615b3f1e382b0c6d0f6a22b73485020c3cc
220b40f subprocess.run(): Changes to exception handling as requested in review: stuarteberg Nov 6, 2017 https://github.com/python/cpython/pull/4283/commits/220b40f5613377a908e9bfe863def6179f86a3ef
Clear filters https://github.com/python/cpython/pull/4283/files
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
subprocess.rst https://github.com/python/cpython/pull/4283/files#diff-346949b57abf9f17798d03d93244ab8f54b1cebcef518df03b21134bf7411f1d
subprocess.py https://github.com/python/cpython/pull/4283/files#diff-619941af4b328b6abf2dc02c54e774fc17acc1ac4172c14db27d6097cbbff92a
test_subprocess.py https://github.com/python/cpython/pull/4283/files#diff-5825be1d1a8e2c68a9321c3d4d04980a72bd4354e35e70bd2407e5e28460c782
2017-11-05-11-42-56.bpo-25942.o5lBhR.rst https://github.com/python/cpython/pull/4283/files#diff-58a1e5cfed6608779c0e52ca0a9f943717a78d72a4e6a32ea2c65d1fed1d2ae8
Doc/library/subprocess.rsthttps://github.com/python/cpython/pull/4283/files#diff-346949b57abf9f17798d03d93244ab8f54b1cebcef518df03b21134bf7411f1d
View file https://github.com/stuarteberg/cpython/blob/220b40f5613377a908e9bfe863def6179f86a3ef/Doc/library/subprocess.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/4283/{{ revealButtonHref }}
https://github.com/python/cpython/pull/4283/files#diff-346949b57abf9f17798d03d93244ab8f54b1cebcef518df03b21134bf7411f1d
nirshttps://github.com/nirs
Nov 9, 2017https://github.com/python/cpython/pull/4283/files#r150116848
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
https://github.com/python/cpython/pull/4283/files#diff-346949b57abf9f17798d03d93244ab8f54b1cebcef518df03b21134bf7411f1d
https://github.com/python/cpython/pull/4283/files#diff-346949b57abf9f17798d03d93244ab8f54b1cebcef518df03b21134bf7411f1d
https://github.com/python/cpython/pull/4283/files#diff-346949b57abf9f17798d03d93244ab8f54b1cebcef518df03b21134bf7411f1d
https://github.com/python/cpython/pull/4283/files#diff-346949b57abf9f17798d03d93244ab8f54b1cebcef518df03b21134bf7411f1d
https://github.com/python/cpython/pull/4283/files#diff-346949b57abf9f17798d03d93244ab8f54b1cebcef518df03b21134bf7411f1d
Lib/subprocess.pyhttps://github.com/python/cpython/pull/4283/files#diff-619941af4b328b6abf2dc02c54e774fc17acc1ac4172c14db27d6097cbbff92a
View file https://github.com/stuarteberg/cpython/blob/220b40f5613377a908e9bfe863def6179f86a3ef/Lib/subprocess.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/4283/{{ revealButtonHref }}
https://github.com/python/cpython/pull/4283/files#diff-619941af4b328b6abf2dc02c54e774fc17acc1ac4172c14db27d6097cbbff92a
https://github.com/python/cpython/pull/4283/files#diff-619941af4b328b6abf2dc02c54e774fc17acc1ac4172c14db27d6097cbbff92a
https://github.com/python/cpython/pull/4283/files#diff-619941af4b328b6abf2dc02c54e774fc17acc1ac4172c14db27d6097cbbff92a
https://github.com/python/cpython/pull/4283/files#diff-619941af4b328b6abf2dc02c54e774fc17acc1ac4172c14db27d6097cbbff92a
nirshttps://github.com/nirs
Nov 9, 2017https://github.com/python/cpython/pull/4283/files#r150118344
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
stuarteberghttps://github.com/stuarteberg
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150129301
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
nirshttps://github.com/nirs
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150331498
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
@stuarteberghttps://github.com/stuarteberg
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
https://github.com/python/cpython/pull/4283/files#diff-619941af4b328b6abf2dc02c54e774fc17acc1ac4172c14db27d6097cbbff92a
https://github.com/python/cpython/pull/4283/files#diff-619941af4b328b6abf2dc02c54e774fc17acc1ac4172c14db27d6097cbbff92a
nirshttps://github.com/nirs
Nov 9, 2017https://github.com/python/cpython/pull/4283/files#r150114377
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
stuarteberghttps://github.com/stuarteberg
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150129307
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
stuarteberghttps://github.com/stuarteberg
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150300325
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
pilcrowhttps://github.com/pilcrow
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150308214
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
"terminal interrupt signal"http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
nirshttps://github.com/nirs
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150332143
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
stuarteberghttps://github.com/stuarteberg
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150344097
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
nirshttps://github.com/nirs
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150350821
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
stuarteberghttps://github.com/stuarteberg
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150353884
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
nirshttps://github.com/nirs
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150357767
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
nirshttps://github.com/nirs
Nov 9, 2017https://github.com/python/cpython/pull/4283/files#r150115925
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
pilcrowhttps://github.com/pilcrow
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150134963
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
stuarteberghttps://github.com/stuarteberg
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150238487
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
pilcrowhttps://github.com/pilcrow
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150270313
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
stuarteberghttps://github.com/stuarteberg
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150274985
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
https://github.com/python/cpython/pull/4283/files#diff-619941af4b328b6abf2dc02c54e774fc17acc1ac4172c14db27d6097cbbff92a
Lib/test/test_subprocess.pyhttps://github.com/python/cpython/pull/4283/files#diff-5825be1d1a8e2c68a9321c3d4d04980a72bd4354e35e70bd2407e5e28460c782
View file https://github.com/stuarteberg/cpython/blob/220b40f5613377a908e9bfe863def6179f86a3ef/Lib/test/test_subprocess.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/4283/{{ revealButtonHref }}
https://github.com/python/cpython/pull/4283/files#diff-5825be1d1a8e2c68a9321c3d4d04980a72bd4354e35e70bd2407e5e28460c782
https://github.com/python/cpython/pull/4283/files#diff-5825be1d1a8e2c68a9321c3d4d04980a72bd4354e35e70bd2407e5e28460c782
Misc/NEWS.d/next/Library/2017-11-05-11-42-56.bpo-25942.o5lBhR.rsthttps://github.com/python/cpython/pull/4283/files#diff-58a1e5cfed6608779c0e52ca0a9f943717a78d72a4e6a32ea2c65d1fed1d2ae8
View file https://github.com/stuarteberg/cpython/blob/220b40f5613377a908e9bfe863def6179f86a3ef/Misc/NEWS.d/next/Library/2017-11-05-11-42-56.bpo-25942.o5lBhR.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/4283/{{ revealButtonHref }}
nirshttps://github.com/nirs
Nov 9, 2017https://github.com/python/cpython/pull/4283/files#r150116134
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
stuarteberghttps://github.com/stuarteberg
Nov 10, 2017https://github.com/python/cpython/pull/4283/files#r150129314
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/python/cpython/pull/4283/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.