Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_subprocess.py @ 70817:dd775b1561ba
Fix markup.
| author | Georg Brandl <georg@python.org> |
|---|---|
| date | Tue, 14 Jun 2011 21:09:55 +0200 |
| parents | 509622ce587a |
| children | 10ecf8576eb2 |
| rev | line source |
|---|---|
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1 import unittest |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
46710
diff
changeset
|
2 from test import support |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3 import subprocess |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
4 import sys |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
5 import signal |
|
68526
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
6 import io |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
7 import os |
|
59209
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
8 import errno |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
9 import tempfile |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
10 import time |
|
33739
76355363101b
New helper remove_stderr_debug_decorations(). This test passes in a
Tim Peters <tim.peters@gmail.com>
parents:
33738
diff
changeset
|
11 import re |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
12 import sysconfig |
|
66676
b37da60c9072
issue7213 + issue2320: Cause a DeprecationWarning if the close_fds argument is
Gregory P. Smith <greg@mad-scientist.com>
parents:
66622
diff
changeset
|
13 import warnings |
|
66868
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
14 import select |
|
68491
141bbcb19c06
Fix the @test_NNNN_tmp file terds being left in whatever your $PWD was
Gregory P. Smith <greg@krypto.org>
parents:
68432
diff
changeset
|
15 import shutil |
|
59723
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
16 try: |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
17 import gc |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
18 except ImportError: |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
19 gc = None |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
20 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
21 mswindows = (sys.platform == "win32") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
22 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
23 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
24 # Depends on the following external programs: Python |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
25 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
26 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
27 if mswindows: |
| 33732 | 28 SETBINARY = ('import msvcrt; msvcrt.setmode(sys.stdout.fileno(), ' |
| 29 'os.O_BINARY);') | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
30 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
31 SETBINARY = '' |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
32 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
33 |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
34 try: |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
35 mkstemp = tempfile.mkstemp |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
36 except AttributeError: |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
37 # tempfile.mkstemp is not available |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
38 def mkstemp(): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
39 """Replacement for mkstemp, calling mktemp.""" |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
40 fname = tempfile.mktemp() |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
41 return os.open(fname, os.O_RDWR|os.O_CREAT), fname |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
42 |
|
33739
76355363101b
New helper remove_stderr_debug_decorations(). This test passes in a
Tim Peters <tim.peters@gmail.com>
parents:
33738
diff
changeset
|
43 |
|
63930
8499ae5d9719
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63843
diff
changeset
|
44 class BaseTestCase(unittest.TestCase): |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
45 def setUp(self): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
46 # Try to minimize the number of children we have so this test |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
47 # doesn't crash on some buildbots (Alphas in particular). |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
48 support.reap_children() |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
49 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
50 def tearDown(self): |
|
59340
04955e7eb597
Merged revisions 78661-78662 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59216
diff
changeset
|
51 for inst in subprocess._active: |
|
04955e7eb597
Merged revisions 78661-78662 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59216
diff
changeset
|
52 inst.wait() |
|
04955e7eb597
Merged revisions 78661-78662 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59216
diff
changeset
|
53 subprocess._cleanup() |
|
04955e7eb597
Merged revisions 78661-78662 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59216
diff
changeset
|
54 self.assertFalse(subprocess._active, "subprocess._active not empty") |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
55 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
56 def assertStderrEqual(self, stderr, expected, msg=None): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
57 # In a debug build, stuff like "[6580 refs]" is printed to stderr at |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
58 # shutdown time. That frustrates tests trying to check stderr produced |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
59 # from a spawned Python process. |
|
63727
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
63141
diff
changeset
|
60 actual = support.strip_python_stderr(stderr) |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
61 # strip_python_stderr also strips whitespace, so we do too. |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
62 expected = expected.strip() |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
63 self.assertEqual(actual, expected, msg) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
64 |
|
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
65 |
|
63930
8499ae5d9719
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63843
diff
changeset
|
66 class ProcessTestCase(BaseTestCase): |
|
60057
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
67 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
68 def test_call_seq(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
69 # call() function with sequence argument |
| 33732 | 70 rc = subprocess.call([sys.executable, "-c", |
| 71 "import sys; sys.exit(47)"]) | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
72 self.assertEqual(rc, 47) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
73 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
74 def test_call_timeout(self): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
75 # call() function with timeout argument; we want to test that the child |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
76 # process gets killed when the timeout expires. If the child isn't |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
77 # killed, this call will deadlock since subprocess.call waits for the |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
78 # child. |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
79 self.assertRaises(subprocess.TimeoutExpired, subprocess.call, |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
80 [sys.executable, "-c", "while True: pass"], |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
81 timeout=0.1) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
82 |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
83 def test_check_call_zero(self): |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
84 # check_call() function with zero return code |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
85 rc = subprocess.check_call([sys.executable, "-c", |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
86 "import sys; sys.exit(0)"]) |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
87 self.assertEqual(rc, 0) |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
88 |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
89 def test_check_call_nonzero(self): |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
90 # check_call() function with non-zero return code |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
91 with self.assertRaises(subprocess.CalledProcessError) as c: |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
92 subprocess.check_call([sys.executable, "-c", |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
93 "import sys; sys.exit(47)"]) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
94 self.assertEqual(c.exception.returncode, 47) |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
95 |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
96 def test_check_output(self): |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
97 # check_output() function with zero return code |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
98 output = subprocess.check_output( |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
99 [sys.executable, "-c", "print('BDFL')"]) |
|
58415
f6a626f34840
use assert[Not]In where appropriate
Benjamin Peterson <benjamin@python.org>
parents:
55626
diff
changeset
|
100 self.assertIn(b'BDFL', output) |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
101 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
102 def test_check_output_nonzero(self): |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
103 # check_call() function with non-zero return code |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
104 with self.assertRaises(subprocess.CalledProcessError) as c: |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
105 subprocess.check_output( |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
106 [sys.executable, "-c", "import sys; sys.exit(5)"]) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
107 self.assertEqual(c.exception.returncode, 5) |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
108 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
109 def test_check_output_stderr(self): |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
110 # check_output() function stderr redirected to stdout |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
111 output = subprocess.check_output( |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
112 [sys.executable, "-c", "import sys; sys.stderr.write('BDFL')"], |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
113 stderr=subprocess.STDOUT) |
|
58415
f6a626f34840
use assert[Not]In where appropriate
Benjamin Peterson <benjamin@python.org>
parents:
55626
diff
changeset
|
114 self.assertIn(b'BDFL', output) |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
115 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
116 def test_check_output_stdout_arg(self): |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
117 # check_output() function stderr redirected to stdout |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
118 with self.assertRaises(ValueError) as c: |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
119 output = subprocess.check_output( |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
120 [sys.executable, "-c", "print('will not be run')"], |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
121 stdout=sys.stdout) |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
122 self.fail("Expected ValueError when stdout arg supplied.") |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
123 self.assertIn('stdout', c.exception.args[0]) |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49200
diff
changeset
|
124 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
125 def test_check_output_timeout(self): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
126 # check_output() function with timeout arg |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
127 with self.assertRaises(subprocess.TimeoutExpired) as c: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
128 output = subprocess.check_output( |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
129 [sys.executable, "-c", |
|
70693
509622ce587a
Use a sleep for test_subprocess timeout test
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70576
diff
changeset
|
130 "import sys, time\n" |
|
509622ce587a
Use a sleep for test_subprocess timeout test
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70576
diff
changeset
|
131 "sys.stdout.write('BDFL')\n" |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
132 "sys.stdout.flush()\n" |
|
70693
509622ce587a
Use a sleep for test_subprocess timeout test
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70576
diff
changeset
|
133 "time.sleep(3600)"], |
|
68619
2e4879d44604
Bump up the subprocess timeouts even more. :(
Reid Kleckner <reid@kleckner.net>
parents:
68618
diff
changeset
|
134 # Some heavily loaded buildbots (sparc Debian 3.x) require |
|
2e4879d44604
Bump up the subprocess timeouts even more. :(
Reid Kleckner <reid@kleckner.net>
parents:
68618
diff
changeset
|
135 # this much time to start and print. |
|
2e4879d44604
Bump up the subprocess timeouts even more. :(
Reid Kleckner <reid@kleckner.net>
parents:
68618
diff
changeset
|
136 timeout=3) |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
137 self.fail("Expected TimeoutExpired.") |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
138 self.assertEqual(c.exception.output, b'BDFL') |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
139 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
140 def test_call_kwargs(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
141 # call() function with keyword args |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
142 newenv = os.environ.copy() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
143 newenv["FRUIT"] = "banana" |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
144 rc = subprocess.call([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
145 'import sys, os;' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
146 'sys.exit(os.getenv("FRUIT")=="banana")'], |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
147 env=newenv) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
148 self.assertEqual(rc, 1) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
149 |
|
70554
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70465
diff
changeset
|
150 def test_invalid_args(self): |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70465
diff
changeset
|
151 # Popen() called with invalid arguments should raise TypeError |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70465
diff
changeset
|
152 # but Popen.__del__ should not complain (issue #12085) |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70465
diff
changeset
|
153 with support.captured_stderr() as s: |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70465
diff
changeset
|
154 self.assertRaises(TypeError, subprocess.Popen, invalid_arg_name=1) |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70465
diff
changeset
|
155 argcount = subprocess.Popen.__init__.__code__.co_argcount |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70465
diff
changeset
|
156 too_many_args = [0] * (argcount + 1) |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70465
diff
changeset
|
157 self.assertRaises(TypeError, subprocess.Popen, *too_many_args) |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70465
diff
changeset
|
158 self.assertEqual(s.getvalue(), '') |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70465
diff
changeset
|
159 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
160 def test_stdin_none(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
161 # .stdin is None when not redirected |
|
40788
e9a6234b26af
* Remove PRINT_ITEM(_TO), PRINT_NEWLINE(_TO) opcodes.
Georg Brandl <georg@python.org>
parents:
40643
diff
changeset
|
162 p = subprocess.Popen([sys.executable, "-c", 'print("banana")'], |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
163 stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
164 self.addCleanup(p.stdout.close) |
|
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
165 self.addCleanup(p.stderr.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
166 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
167 self.assertEqual(p.stdin, None) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
168 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
169 def test_stdout_none(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
170 # .stdout is None when not redirected |
|
33738
a4f747e72138
Kill several problems at once: test_poll() failed sometimes for me.
Tim Peters <tim.peters@gmail.com>
parents:
33737
diff
changeset
|
171 p = subprocess.Popen([sys.executable, "-c", |
|
40788
e9a6234b26af
* Remove PRINT_ITEM(_TO), PRINT_NEWLINE(_TO) opcodes.
Georg Brandl <georg@python.org>
parents:
40643
diff
changeset
|
172 'print(" this bit of output is from a ' |
|
33737
e4f7d3b0c5d4
test_stdout_none(): Don't print "banana" to the screen in the middle
Tim Peters <tim.peters@gmail.com>
parents:
33736
diff
changeset
|
173 'test of stdout in a different ' |
|
40788
e9a6234b26af
* Remove PRINT_ITEM(_TO), PRINT_NEWLINE(_TO) opcodes.
Georg Brandl <georg@python.org>
parents:
40643
diff
changeset
|
174 'process ...")'], |
|
33737
e4f7d3b0c5d4
test_stdout_none(): Don't print "banana" to the screen in the middle
Tim Peters <tim.peters@gmail.com>
parents:
33736
diff
changeset
|
175 stdin=subprocess.PIPE, stderr=subprocess.PIPE) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
176 self.addCleanup(p.stdin.close) |
|
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
177 self.addCleanup(p.stderr.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
178 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
179 self.assertEqual(p.stdout, None) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
180 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
181 def test_stderr_none(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
182 # .stderr is None when not redirected |
|
40788
e9a6234b26af
* Remove PRINT_ITEM(_TO), PRINT_NEWLINE(_TO) opcodes.
Georg Brandl <georg@python.org>
parents:
40643
diff
changeset
|
183 p = subprocess.Popen([sys.executable, "-c", 'print("banana")'], |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
184 stdin=subprocess.PIPE, stdout=subprocess.PIPE) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
185 self.addCleanup(p.stdout.close) |
|
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
186 self.addCleanup(p.stdin.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
187 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
188 self.assertEqual(p.stderr, None) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
189 |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
190 def test_executable_with_cwd(self): |
|
59507
a111024a0bcb
Merged revisions 78833 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59504
diff
changeset
|
191 python_dir = os.path.dirname(os.path.realpath(sys.executable)) |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
192 p = subprocess.Popen(["somethingyoudonthave", "-c", |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
193 "import sys; sys.exit(47)"], |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
194 executable=sys.executable, cwd=python_dir) |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
195 p.wait() |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
196 self.assertEqual(p.returncode, 47) |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
197 |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
198 @unittest.skipIf(sysconfig.is_python_build(), |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
199 "need an installed Python. See #7774") |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
200 def test_executable_without_cwd(self): |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
201 # For a normal installation, it should work without 'cwd' |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
202 # argument. For test runs in the build directory, see #7774. |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
203 p = subprocess.Popen(["somethingyoudonthave", "-c", |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58415
diff
changeset
|
204 "import sys; sys.exit(47)"], |
| 33732 | 205 executable=sys.executable) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
206 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
207 self.assertEqual(p.returncode, 47) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
208 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
209 def test_stdin_pipe(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
210 # stdin redirection |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
211 p = subprocess.Popen([sys.executable, "-c", |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
212 'import sys; sys.exit(sys.stdin.read() == "pear")'], |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
213 stdin=subprocess.PIPE) |
|
42927
f3b0ac4e684f
More str/bytes goodness.
Guido van Rossum <guido@python.org>
parents:
42863
diff
changeset
|
214 p.stdin.write(b"pear") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
215 p.stdin.close() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
216 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
217 self.assertEqual(p.returncode, 1) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
218 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
219 def test_stdin_filedes(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
220 # stdin is set to open file descriptor |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
221 tf = tempfile.TemporaryFile() |
|
65799
0ee86fd902f1
close some more files
Benjamin Peterson <benjamin@python.org>
parents:
65415
diff
changeset
|
222 self.addCleanup(tf.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
223 d = tf.fileno() |
|
49200
bdb660dca74d
Issue #3782: os.write() must not accept unicode strings
Antoine Pitrou <solipsis@pitrou.net>
parents:
48395
diff
changeset
|
224 os.write(d, b"pear") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
225 os.lseek(d, 0, 0) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
226 p = subprocess.Popen([sys.executable, "-c", |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
227 'import sys; sys.exit(sys.stdin.read() == "pear")'], |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
228 stdin=d) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
229 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
230 self.assertEqual(p.returncode, 1) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
231 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
232 def test_stdin_fileobj(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
233 # stdin is set to open file object |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
234 tf = tempfile.TemporaryFile() |
|
65799
0ee86fd902f1
close some more files
Benjamin Peterson <benjamin@python.org>
parents:
65415
diff
changeset
|
235 self.addCleanup(tf.close) |
|
42927
f3b0ac4e684f
More str/bytes goodness.
Guido van Rossum <guido@python.org>
parents:
42863
diff
changeset
|
236 tf.write(b"pear") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
237 tf.seek(0) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
238 p = subprocess.Popen([sys.executable, "-c", |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
239 'import sys; sys.exit(sys.stdin.read() == "pear")'], |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
240 stdin=tf) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
241 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
242 self.assertEqual(p.returncode, 1) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
243 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
244 def test_stdout_pipe(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
245 # stdout redirection |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
246 p = subprocess.Popen([sys.executable, "-c", |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
247 'import sys; sys.stdout.write("orange")'], |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
248 stdout=subprocess.PIPE) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
249 self.addCleanup(p.stdout.close) |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
250 self.assertEqual(p.stdout.read(), b"orange") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
251 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
252 def test_stdout_filedes(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
253 # stdout is set to open file descriptor |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
254 tf = tempfile.TemporaryFile() |
|
65799
0ee86fd902f1
close some more files
Benjamin Peterson <benjamin@python.org>
parents:
65415
diff
changeset
|
255 self.addCleanup(tf.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
256 d = tf.fileno() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
257 p = subprocess.Popen([sys.executable, "-c", |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
258 'import sys; sys.stdout.write("orange")'], |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
259 stdout=d) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
260 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
261 os.lseek(d, 0, 0) |
|
41732
bbb099d4ec80
Make test_subprocess pass. The subprocess module now reads and writes
Guido van Rossum <guido@python.org>
parents:
40788
diff
changeset
|
262 self.assertEqual(os.read(d, 1024), b"orange") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
263 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
264 def test_stdout_fileobj(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
265 # stdout is set to open file object |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
266 tf = tempfile.TemporaryFile() |
|
65799
0ee86fd902f1
close some more files
Benjamin Peterson <benjamin@python.org>
parents:
65415
diff
changeset
|
267 self.addCleanup(tf.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
268 p = subprocess.Popen([sys.executable, "-c", |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
269 'import sys; sys.stdout.write("orange")'], |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
270 stdout=tf) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
271 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
272 tf.seek(0) |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
273 self.assertEqual(tf.read(), b"orange") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
274 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
275 def test_stderr_pipe(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
276 # stderr redirection |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
277 p = subprocess.Popen([sys.executable, "-c", |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
278 'import sys; sys.stderr.write("strawberry")'], |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
279 stderr=subprocess.PIPE) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
280 self.addCleanup(p.stderr.close) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
281 self.assertStderrEqual(p.stderr.read(), b"strawberry") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
282 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
283 def test_stderr_filedes(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
284 # stderr is set to open file descriptor |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
285 tf = tempfile.TemporaryFile() |
|
65799
0ee86fd902f1
close some more files
Benjamin Peterson <benjamin@python.org>
parents:
65415
diff
changeset
|
286 self.addCleanup(tf.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
287 d = tf.fileno() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
288 p = subprocess.Popen([sys.executable, "-c", |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
289 'import sys; sys.stderr.write("strawberry")'], |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
290 stderr=d) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
291 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
292 os.lseek(d, 0, 0) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
293 self.assertStderrEqual(os.read(d, 1024), b"strawberry") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
294 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
295 def test_stderr_fileobj(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
296 # stderr is set to open file object |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
297 tf = tempfile.TemporaryFile() |
|
65799
0ee86fd902f1
close some more files
Benjamin Peterson <benjamin@python.org>
parents:
65415
diff
changeset
|
298 self.addCleanup(tf.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
299 p = subprocess.Popen([sys.executable, "-c", |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
300 'import sys; sys.stderr.write("strawberry")'], |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
301 stderr=tf) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
302 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
303 tf.seek(0) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
304 self.assertStderrEqual(tf.read(), b"strawberry") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
305 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
306 def test_stdout_stderr_pipe(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
307 # capture stdout and stderr to the same pipe |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
308 p = subprocess.Popen([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
309 'import sys;' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
310 'sys.stdout.write("apple");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
311 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
312 'sys.stderr.write("orange")'], |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
313 stdout=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
314 stderr=subprocess.STDOUT) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
315 self.addCleanup(p.stdout.close) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
316 self.assertStderrEqual(p.stdout.read(), b"appleorange") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
317 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
318 def test_stdout_stderr_file(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
319 # capture stdout and stderr to the same open file |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
320 tf = tempfile.TemporaryFile() |
|
65799
0ee86fd902f1
close some more files
Benjamin Peterson <benjamin@python.org>
parents:
65415
diff
changeset
|
321 self.addCleanup(tf.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
322 p = subprocess.Popen([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
323 'import sys;' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
324 'sys.stdout.write("apple");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
325 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
326 'sys.stderr.write("orange")'], |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
327 stdout=tf, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
328 stderr=tf) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
329 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
330 tf.seek(0) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
331 self.assertStderrEqual(tf.read(), b"appleorange") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
332 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
333 def test_stdout_filedes_of_stdout(self): |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
334 # stdout is set to 1 (#1531862). |
|
49200
bdb660dca74d
Issue #3782: os.write() must not accept unicode strings
Antoine Pitrou <solipsis@pitrou.net>
parents:
48395
diff
changeset
|
335 cmd = r"import sys, os; sys.exit(os.write(sys.stdout.fileno(), b'.\n'))" |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
336 rc = subprocess.call([sys.executable, "-c", cmd], stdout=1) |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64853
diff
changeset
|
337 self.assertEqual(rc, 2) |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
338 |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
339 def test_stdout_devnull(self): |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
340 p = subprocess.Popen([sys.executable, "-c", |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
341 'for i in range(10240):' |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
342 'print("x" * 1024)'], |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
343 stdout=subprocess.DEVNULL) |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
344 p.wait() |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
345 self.assertEqual(p.stdout, None) |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
346 |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
347 def test_stderr_devnull(self): |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
348 p = subprocess.Popen([sys.executable, "-c", |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
349 'import sys\n' |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
350 'for i in range(10240):' |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
351 'sys.stderr.write("x" * 1024)'], |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
352 stderr=subprocess.DEVNULL) |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
353 p.wait() |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
354 self.assertEqual(p.stderr, None) |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
355 |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
356 def test_stdin_devnull(self): |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
357 p = subprocess.Popen([sys.executable, "-c", |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
358 'import sys;' |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
359 'sys.stdin.read(1)'], |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
360 stdin=subprocess.DEVNULL) |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
361 p.wait() |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
362 self.assertEqual(p.stdin, None) |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68555
diff
changeset
|
363 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
364 def test_cwd(self): |
|
44373
2750d531fdc0
Merged revisions 59565-59594 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
365 tmpdir = tempfile.gettempdir() |
|
33980
4005f79d281a
Use os.chdir/os.getcwd instead of os.path.realpath, to support Tru64
Peter Astrand <astrand@lysator.liu.se>
parents:
33814
diff
changeset
|
366 # We cannot use os.path.realpath to canonicalize the path, |
|
4005f79d281a
Use os.chdir/os.getcwd instead of os.path.realpath, to support Tru64
Peter Astrand <astrand@lysator.liu.se>
parents:
33814
diff
changeset
|
367 # since it doesn't expand Tru64 {memb} strings. See bug 1063571. |
|
4005f79d281a
Use os.chdir/os.getcwd instead of os.path.realpath, to support Tru64
Peter Astrand <astrand@lysator.liu.se>
parents:
33814
diff
changeset
|
368 cwd = os.getcwd() |
|
4005f79d281a
Use os.chdir/os.getcwd instead of os.path.realpath, to support Tru64
Peter Astrand <astrand@lysator.liu.se>
parents:
33814
diff
changeset
|
369 os.chdir(tmpdir) |
|
4005f79d281a
Use os.chdir/os.getcwd instead of os.path.realpath, to support Tru64
Peter Astrand <astrand@lysator.liu.se>
parents:
33814
diff
changeset
|
370 tmpdir = os.getcwd() |
|
4005f79d281a
Use os.chdir/os.getcwd instead of os.path.realpath, to support Tru64
Peter Astrand <astrand@lysator.liu.se>
parents:
33814
diff
changeset
|
371 os.chdir(cwd) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
372 p = subprocess.Popen([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
373 'import sys,os;' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
374 'sys.stdout.write(os.getcwd())'], |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
375 stdout=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
376 cwd=tmpdir) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
377 self.addCleanup(p.stdout.close) |
|
33742
179e42ea2e9c
normalize case when comparing directory names (problem reported by
Fredrik Lundh <fredrik@pythonware.com>
parents:
33739
diff
changeset
|
378 normcase = os.path.normcase |
|
42927
f3b0ac4e684f
More str/bytes goodness.
Guido van Rossum <guido@python.org>
parents:
42863
diff
changeset
|
379 self.assertEqual(normcase(p.stdout.read().decode("utf-8")), |
|
f3b0ac4e684f
More str/bytes goodness.
Guido van Rossum <guido@python.org>
parents:
42863
diff
changeset
|
380 normcase(tmpdir)) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
381 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
382 def test_env(self): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
383 newenv = os.environ.copy() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
384 newenv["FRUIT"] = "orange" |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
385 p = subprocess.Popen([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
386 'import sys,os;' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
387 'sys.stdout.write(os.getenv("FRUIT"))'], |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
388 stdout=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
389 env=newenv) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
390 self.addCleanup(p.stdout.close) |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
391 self.assertEqual(p.stdout.read(), b"orange") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
392 |
|
34671
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
393 def test_communicate_stdin(self): |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
394 p = subprocess.Popen([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
395 'import sys;' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
396 'sys.exit(sys.stdin.read() == "pear")'], |
|
34671
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
397 stdin=subprocess.PIPE) |
|
42927
f3b0ac4e684f
More str/bytes goodness.
Guido van Rossum <guido@python.org>
parents:
42863
diff
changeset
|
398 p.communicate(b"pear") |
|
34671
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
399 self.assertEqual(p.returncode, 1) |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
400 |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
401 def test_communicate_stdout(self): |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
402 p = subprocess.Popen([sys.executable, "-c", |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
403 'import sys; sys.stdout.write("pineapple")'], |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
404 stdout=subprocess.PIPE) |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
405 (stdout, stderr) = p.communicate() |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
406 self.assertEqual(stdout, b"pineapple") |
|
34671
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
407 self.assertEqual(stderr, None) |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
408 |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
409 def test_communicate_stderr(self): |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
410 p = subprocess.Popen([sys.executable, "-c", |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
411 'import sys; sys.stderr.write("pineapple")'], |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
412 stderr=subprocess.PIPE) |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
413 (stdout, stderr) = p.communicate() |
|
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
414 self.assertEqual(stdout, None) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
415 self.assertStderrEqual(stderr, b"pineapple") |
|
34671
db7a8310b19a
Added three more testcases: Using communicate with only one of
Peter Astrand <astrand@lysator.liu.se>
parents:
34302
diff
changeset
|
416 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
417 def test_communicate(self): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
418 p = subprocess.Popen([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
419 'import sys,os;' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
420 'sys.stderr.write("pineapple");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
421 'sys.stdout.write(sys.stdin.read())'], |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
422 stdin=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
423 stdout=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
424 stderr=subprocess.PIPE) |
|
65977
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
425 self.addCleanup(p.stdout.close) |
|
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
426 self.addCleanup(p.stderr.close) |
|
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
427 self.addCleanup(p.stdin.close) |
|
48395
bb65f9b76c1f
#2683: Popen.communicate() argument must be bytes.
Georg Brandl <georg@python.org>
parents:
47557
diff
changeset
|
428 (stdout, stderr) = p.communicate(b"banana") |
|
41732
bbb099d4ec80
Make test_subprocess pass. The subprocess module now reads and writes
Guido van Rossum <guido@python.org>
parents:
40788
diff
changeset
|
429 self.assertEqual(stdout, b"banana") |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
430 self.assertStderrEqual(stderr, b"pineapple") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
431 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
432 def test_communicate_timeout(self): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
433 p = subprocess.Popen([sys.executable, "-c", |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
434 'import sys,os,time;' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
435 'sys.stderr.write("pineapple\\n");' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
436 'time.sleep(1);' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
437 'sys.stderr.write("pear\\n");' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
438 'sys.stdout.write(sys.stdin.read())'], |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
439 universal_newlines=True, |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
440 stdin=subprocess.PIPE, |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
441 stdout=subprocess.PIPE, |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
442 stderr=subprocess.PIPE) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
443 self.assertRaises(subprocess.TimeoutExpired, p.communicate, "banana", |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
444 timeout=0.3) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
445 # Make sure we can keep waiting for it, and that we get the whole output |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
446 # after it completes. |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
447 (stdout, stderr) = p.communicate() |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
448 self.assertEqual(stdout, "banana") |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
449 self.assertStderrEqual(stderr.encode(), b"pineapple\npear\n") |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
450 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
451 def test_communicate_timeout_large_ouput(self): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
452 # Test a expring timeout while the child is outputting lots of data. |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
453 p = subprocess.Popen([sys.executable, "-c", |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
454 'import sys,os,time;' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
455 'sys.stdout.write("a" * (64 * 1024));' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
456 'time.sleep(0.2);' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
457 'sys.stdout.write("a" * (64 * 1024));' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
458 'time.sleep(0.2);' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
459 'sys.stdout.write("a" * (64 * 1024));' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
460 'time.sleep(0.2);' |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
461 'sys.stdout.write("a" * (64 * 1024));'], |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
462 stdout=subprocess.PIPE) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
463 self.assertRaises(subprocess.TimeoutExpired, p.communicate, timeout=0.4) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
464 (stdout, _) = p.communicate() |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
465 self.assertEqual(len(stdout), 4 * 64 * 1024) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
466 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
467 # Test for the fd leak reported in http://bugs.python.org/issue2791. |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
468 def test_communicate_pipe_fd_leak(self): |
|
67130
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
469 for stdin_pipe in (False, True): |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
470 for stdout_pipe in (False, True): |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
471 for stderr_pipe in (False, True): |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
472 options = {} |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
473 if stdin_pipe: |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
474 options['stdin'] = subprocess.PIPE |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
475 if stdout_pipe: |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
476 options['stdout'] = subprocess.PIPE |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
477 if stderr_pipe: |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
478 options['stderr'] = subprocess.PIPE |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
479 if not options: |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
480 continue |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
481 p = subprocess.Popen((sys.executable, "-c", "pass"), **options) |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
482 p.communicate() |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
483 if p.stdin is not None: |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
484 self.assertTrue(p.stdin.closed) |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
485 if p.stdout is not None: |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
486 self.assertTrue(p.stdout.closed) |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
487 if p.stderr is not None: |
|
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66896
diff
changeset
|
488 self.assertTrue(p.stderr.closed) |
|
47557
98827a21e352
Merged revisions 63724,63726,63732,63744,63754-63755,63757-63758,63760,63775,63781-63782,63787,63805-63808,63818-63819,63823-63824 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47331
diff
changeset
|
489 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
490 def test_communicate_returns(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
491 # communicate() should return None if no redirection is active |
| 33732 | 492 p = subprocess.Popen([sys.executable, "-c", |
| 493 "import sys; sys.exit(47)"]) | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
494 (stdout, stderr) = p.communicate() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
495 self.assertEqual(stdout, None) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
496 self.assertEqual(stderr, None) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
497 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
498 def test_communicate_pipe_buf(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
499 # communicate() with writes larger than pipe_buf |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
500 # This test will probably deadlock rather than fail, if |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
501 # communicate() does not work properly. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
502 x, y = os.pipe() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
503 os.close(x) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
504 os.close(y) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
505 p = subprocess.Popen([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
506 'import sys,os;' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
507 'sys.stdout.write(sys.stdin.read(47));' |
|
70474
866d959dea8e
Issue #12196: Add PIPE_MAX_SIZE to test.support, constant larger than the
Charles-François Natali <neologix@free.fr>
parents:
70469
diff
changeset
|
508 'sys.stderr.write("x" * %d);' |
|
866d959dea8e
Issue #12196: Add PIPE_MAX_SIZE to test.support, constant larger than the
Charles-François Natali <neologix@free.fr>
parents:
70469
diff
changeset
|
509 'sys.stdout.write(sys.stdin.read())' % |
|
866d959dea8e
Issue #12196: Add PIPE_MAX_SIZE to test.support, constant larger than the
Charles-François Natali <neologix@free.fr>
parents:
70469
diff
changeset
|
510 support.PIPE_MAX_SIZE], |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
511 stdin=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
512 stdout=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
513 stderr=subprocess.PIPE) |
|
65977
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
514 self.addCleanup(p.stdout.close) |
|
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
515 self.addCleanup(p.stderr.close) |
|
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
516 self.addCleanup(p.stdin.close) |
|
70474
866d959dea8e
Issue #12196: Add PIPE_MAX_SIZE to test.support, constant larger than the
Charles-François Natali <neologix@free.fr>
parents:
70469
diff
changeset
|
517 string_to_write = b"a" * support.PIPE_MAX_SIZE |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
518 (stdout, stderr) = p.communicate(string_to_write) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
519 self.assertEqual(stdout, string_to_write) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
520 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
521 def test_writes_before_communicate(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
522 # stdin.write before communicate() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
523 p = subprocess.Popen([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
524 'import sys,os;' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
525 'sys.stdout.write(sys.stdin.read())'], |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
526 stdin=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
527 stdout=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
528 stderr=subprocess.PIPE) |
|
65977
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
529 self.addCleanup(p.stdout.close) |
|
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
530 self.addCleanup(p.stderr.close) |
|
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
531 self.addCleanup(p.stdin.close) |
|
42927
f3b0ac4e684f
More str/bytes goodness.
Guido van Rossum <guido@python.org>
parents:
42863
diff
changeset
|
532 p.stdin.write(b"banana") |
|
f3b0ac4e684f
More str/bytes goodness.
Guido van Rossum <guido@python.org>
parents:
42863
diff
changeset
|
533 (stdout, stderr) = p.communicate(b"split") |
|
41732
bbb099d4ec80
Make test_subprocess pass. The subprocess module now reads and writes
Guido van Rossum <guido@python.org>
parents:
40788
diff
changeset
|
534 self.assertEqual(stdout, b"bananasplit") |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
535 self.assertStderrEqual(stderr, b"") |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
536 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
537 def test_universal_newlines(self): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
538 p = subprocess.Popen([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
539 'import sys,os;' + SETBINARY + |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
540 'sys.stdout.write("line1\\n");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
541 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
542 'sys.stdout.write("line2\\n");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
543 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
544 'sys.stdout.write("line3\\r\\n");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
545 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
546 'sys.stdout.write("line4\\r");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
547 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
548 'sys.stdout.write("\\nline5");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
549 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
550 'sys.stdout.write("\\nline6");'], |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
551 stdout=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
552 universal_newlines=1) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
553 self.addCleanup(p.stdout.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
554 stdout = p.stdout.read() |
|
41732
bbb099d4ec80
Make test_subprocess pass. The subprocess module now reads and writes
Guido van Rossum <guido@python.org>
parents:
40788
diff
changeset
|
555 self.assertEqual(stdout, "line1\nline2\nline3\nline4\nline5\nline6") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
556 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
557 def test_universal_newlines_communicate(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
558 # universal newlines through communicate() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
559 p = subprocess.Popen([sys.executable, "-c", |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
560 'import sys,os;' + SETBINARY + |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
561 'sys.stdout.write("line1\\n");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
562 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
563 'sys.stdout.write("line2\\n");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
564 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
565 'sys.stdout.write("line3\\r\\n");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
566 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
567 'sys.stdout.write("line4\\r");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
568 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
569 'sys.stdout.write("\\nline5");' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
570 'sys.stdout.flush();' |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
571 'sys.stdout.write("\\nline6");'], |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
572 stdout=subprocess.PIPE, stderr=subprocess.PIPE, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
573 universal_newlines=1) |
|
65977
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
574 self.addCleanup(p.stdout.close) |
|
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
575 self.addCleanup(p.stderr.close) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
576 (stdout, stderr) = p.communicate() |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
577 self.assertEqual(stdout, "line1\nline2\nline3\nline4\nline5\nline6") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
578 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
579 def test_no_leaking(self): |
|
33733
39a13e39d24e
Experience with Zope2's tests showed it's a Bad Idea to make unittest
Tim Peters <tim.peters@gmail.com>
parents:
33732
diff
changeset
|
580 # Make sure we leak no resources |
|
64814
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
581 if not mswindows: |
|
34673
00e47eb136b2
Only run extensive subprocess tests if -usubprocess to regrtest is specified. Fixes #1124637
Peter Astrand <astrand@lysator.liu.se>
parents:
34671
diff
changeset
|
582 max_handles = 1026 # too much for most UNIX systems |
|
00e47eb136b2
Only run extensive subprocess tests if -usubprocess to regrtest is specified. Fixes #1124637
Peter Astrand <astrand@lysator.liu.se>
parents:
34671
diff
changeset
|
583 else: |
|
64814
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
584 max_handles = 2050 # too much for (at least some) Windows setups |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
585 handles = [] |
|
68491
141bbcb19c06
Fix the @test_NNNN_tmp file terds being left in whatever your $PWD was
Gregory P. Smith <greg@krypto.org>
parents:
68432
diff
changeset
|
586 tmpdir = tempfile.mkdtemp() |
|
64814
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
587 try: |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
588 for i in range(max_handles): |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
589 try: |
|
68491
141bbcb19c06
Fix the @test_NNNN_tmp file terds being left in whatever your $PWD was
Gregory P. Smith <greg@krypto.org>
parents:
68432
diff
changeset
|
590 tmpfile = os.path.join(tmpdir, support.TESTFN) |
|
141bbcb19c06
Fix the @test_NNNN_tmp file terds being left in whatever your $PWD was
Gregory P. Smith <greg@krypto.org>
parents:
68432
diff
changeset
|
591 handles.append(os.open(tmpfile, os.O_WRONLY|os.O_CREAT)) |
|
64814
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
592 except OSError as e: |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
593 if e.errno != errno.EMFILE: |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
594 raise |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
595 break |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
596 else: |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
597 self.skipTest("failed to reach the file descriptor limit " |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
598 "(tried %d)" % max_handles) |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
599 # Close a couple of them (should be enough for a subprocess) |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
600 for i in range(10): |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
601 os.close(handles.pop()) |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
602 # Loop creating some subprocesses. If one of them leaks some fds, |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
603 # the next loop iteration will fail by reaching the max fd limit. |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
604 for i in range(15): |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
605 p = subprocess.Popen([sys.executable, "-c", |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
606 "import sys;" |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
607 "sys.stdout.write(sys.stdin.read())"], |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
608 stdin=subprocess.PIPE, |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
609 stdout=subprocess.PIPE, |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
610 stderr=subprocess.PIPE) |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
611 data = p.communicate(b"lime")[0] |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
612 self.assertEqual(data, b"lime") |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
613 finally: |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
614 for h in handles: |
|
77425f2d7d76
Merged revisions 84883 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64810
diff
changeset
|
615 os.close(h) |
|
68491
141bbcb19c06
Fix the @test_NNNN_tmp file terds being left in whatever your $PWD was
Gregory P. Smith <greg@krypto.org>
parents:
68432
diff
changeset
|
616 shutil.rmtree(tmpdir) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
617 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
618 def test_list2cmdline(self): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
619 self.assertEqual(subprocess.list2cmdline(['a b c', 'd', 'e']), |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
620 '"a b c" d e') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
621 self.assertEqual(subprocess.list2cmdline(['ab"c', '\\', 'd']), |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
622 'ab\\"c \\ d') |
|
44810
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44373
diff
changeset
|
623 self.assertEqual(subprocess.list2cmdline(['ab"c', ' \\', 'd']), |
|
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44373
diff
changeset
|
624 'ab\\"c " \\\\" d') |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
625 self.assertEqual(subprocess.list2cmdline(['a\\\\\\b', 'de fg', 'h']), |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
626 'a\\\\\\b "de fg" h') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
627 self.assertEqual(subprocess.list2cmdline(['a\\"b', 'c', 'd']), |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
628 'a\\\\\\"b c d') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
629 self.assertEqual(subprocess.list2cmdline(['a\\\\b c', 'd', 'e']), |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
630 '"a\\\\b c" d e') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
631 self.assertEqual(subprocess.list2cmdline(['a\\\\b\\ c', 'd', 'e']), |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
632 '"a\\\\b\\ c" d e') |
|
40643
47f9efdc0855
Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40587
diff
changeset
|
633 self.assertEqual(subprocess.list2cmdline(['ab', '']), |
|
47f9efdc0855
Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40587
diff
changeset
|
634 'ab ""') |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
635 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
636 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
637 def test_poll(self): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
638 p = subprocess.Popen([sys.executable, |
|
33738
a4f747e72138
Kill several problems at once: test_poll() failed sometimes for me.
Tim Peters <tim.peters@gmail.com>
parents:
33737
diff
changeset
|
639 "-c", "import time; time.sleep(1)"]) |
|
a4f747e72138
Kill several problems at once: test_poll() failed sometimes for me.
Tim Peters <tim.peters@gmail.com>
parents:
33737
diff
changeset
|
640 count = 0 |
|
a4f747e72138
Kill several problems at once: test_poll() failed sometimes for me.
Tim Peters <tim.peters@gmail.com>
parents:
33737
diff
changeset
|
641 while p.poll() is None: |
|
a4f747e72138
Kill several problems at once: test_poll() failed sometimes for me.
Tim Peters <tim.peters@gmail.com>
parents:
33737
diff
changeset
|
642 time.sleep(0.1) |
|
a4f747e72138
Kill several problems at once: test_poll() failed sometimes for me.
Tim Peters <tim.peters@gmail.com>
parents:
33737
diff
changeset
|
643 count += 1 |
|
a4f747e72138
Kill several problems at once: test_poll() failed sometimes for me.
Tim Peters <tim.peters@gmail.com>
parents:
33737
diff
changeset
|
644 # We expect that the poll loop probably went around about 10 times, |
|
a4f747e72138
Kill several problems at once: test_poll() failed sometimes for me.
Tim Peters <tim.peters@gmail.com>
parents:
33737
diff
changeset
|
645 # but, based on system scheduling we can't control, it's possible |
|
a4f747e72138
Kill several problems at once: test_poll() failed sometimes for me.
Tim Peters <tim.peters@gmail.com>
parents:
33737
diff
changeset
|
646 # poll() never returned None. It "should be" very rare that it |
|
a4f747e72138
Kill several problems at once: test_poll() failed sometimes for me.
Tim Peters <tim.peters@gmail.com>
parents:
33737
diff
changeset
|
647 # didn't go around at least twice. |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
648 self.assertGreaterEqual(count, 2) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
649 # Subsequent invocations should just return the returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
650 self.assertEqual(p.poll(), 0) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
651 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
652 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
653 def test_wait(self): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
654 p = subprocess.Popen([sys.executable, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
655 "-c", "import time; time.sleep(2)"]) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
656 self.assertEqual(p.wait(), 0) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
657 # Subsequent invocations should just return the returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
658 self.assertEqual(p.wait(), 0) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
659 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
660 def test_wait_timeout(self): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68438
diff
changeset
|
661 p = subprocess.Popen([sys.executable, |
|
68481
1e578e964c14
Tweak subprocess test timeouts to satisfy the buildbot.
Reid Kleckner <reid@kleckner.net>
parents:
68462
diff
changeset
|
662 "-c", "import time; time.sleep(0.1)"]) |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
663 with self.assertRaises(subprocess.TimeoutExpired) as c: |
|
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
664 p.wait(timeout=0.01) |
|
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
665 self.assertIn("0.01", str(c.exception)) # For coverage of __str__. |
|
68619
2e4879d44604
Bump up the subprocess timeouts even more. :(
Reid Kleckner <reid@kleckner.net>
parents:
68618
diff
changeset
|
666 # Some heavily loaded buildbots (sparc Debian 3.x) require this much |
|
2e4879d44604
Bump up the subprocess timeouts even more. :(
Reid Kleckner <reid@kleckner.net>
parents:
68618
diff
changeset
|
667 # time to start. |
|
2e4879d44604
Bump up the subprocess timeouts even more. :(
Reid Kleckner <reid@kleckner.net>
parents:
68618
diff
changeset
|
668 self.assertEqual(p.wait(timeout=3), 0) |
|
34052
79d2ae0a62ef
Raise TypeError if bufsize argument is not an integer. Patch 1071755, slightly modified.
Peter Astrand <astrand@lysator.liu.se>
parents:
33998
diff
changeset
|
669 |
|
79d2ae0a62ef
Raise TypeError if bufsize argument is not an integer. Patch 1071755, slightly modified.
Peter Astrand <astrand@lysator.liu.se>
parents:
33998
diff
changeset
|
670 def test_invalid_bufsize(self): |
|
79d2ae0a62ef
Raise TypeError if bufsize argument is not an integer. Patch 1071755, slightly modified.
Peter Astrand <astrand@lysator.liu.se>
parents:
33998
diff
changeset
|
671 # an invalid type of the bufsize argument should raise |
|
79d2ae0a62ef
Raise TypeError if bufsize argument is not an integer. Patch 1071755, slightly modified.
Peter Astrand <astrand@lysator.liu.se>
parents:
33998
diff
changeset
|
672 # TypeError. |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
673 with self.assertRaises(TypeError): |
|
34052
79d2ae0a62ef
Raise TypeError if bufsize argument is not an integer. Patch 1071755, slightly modified.
Peter Astrand <astrand@lysator.liu.se>
parents:
33998
diff
changeset
|
674 subprocess.Popen([sys.executable, "-c", "pass"], "orange") |
|
79d2ae0a62ef
Raise TypeError if bufsize argument is not an integer. Patch 1071755, slightly modified.
Peter Astrand <astrand@lysator.liu.se>
parents:
33998
diff
changeset
|
675 |
|
41984
e420039368b7
The bufsize argument to Popen() should accept None meaning the default (0).
Guido van Rossum <guido@python.org>
parents:
41969
diff
changeset
|
676 def test_bufsize_is_none(self): |
|
e420039368b7
The bufsize argument to Popen() should accept None meaning the default (0).
Guido van Rossum <guido@python.org>
parents:
41969
diff
changeset
|
677 # bufsize=None should be the same as bufsize=0. |
|
e420039368b7
The bufsize argument to Popen() should accept None meaning the default (0).
Guido van Rossum <guido@python.org>
parents:
41969
diff
changeset
|
678 p = subprocess.Popen([sys.executable, "-c", "pass"], None) |
|
e420039368b7
The bufsize argument to Popen() should accept None meaning the default (0).
Guido van Rossum <guido@python.org>
parents:
41969
diff
changeset
|
679 self.assertEqual(p.wait(), 0) |
|
e420039368b7
The bufsize argument to Popen() should accept None meaning the default (0).
Guido van Rossum <guido@python.org>
parents:
41969
diff
changeset
|
680 # Again with keyword arg |
|
e420039368b7
The bufsize argument to Popen() should accept None meaning the default (0).
Guido van Rossum <guido@python.org>
parents:
41969
diff
changeset
|
681 p = subprocess.Popen([sys.executable, "-c", "pass"], bufsize=None) |
|
e420039368b7
The bufsize argument to Popen() should accept None meaning the default (0).
Guido van Rossum <guido@python.org>
parents:
41969
diff
changeset
|
682 self.assertEqual(p.wait(), 0) |
|
e420039368b7
The bufsize argument to Popen() should accept None meaning the default (0).
Guido van Rossum <guido@python.org>
parents:
41969
diff
changeset
|
683 |
|
51721
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
684 def test_leaking_fds_on_error(self): |
|
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
685 # see bug #5179: Popen leaks file descriptors to PIPEs if |
|
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
686 # the child fails to execute; this will eventually exhaust |
|
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
687 # the maximum number of open fds. 1024 seems a very common |
|
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
688 # value for that limit, but Windows has 2048, so we loop |
|
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
689 # 1024 times (each call leaked two fds). |
|
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
690 for i in range(1024): |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
691 # Windows raises IOError. Others raise OSError. |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
692 with self.assertRaises(EnvironmentError) as c: |
|
51721
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
693 subprocess.Popen(['nonexisting_i_hope'], |
|
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
694 stdout=subprocess.PIPE, |
|
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
695 stderr=subprocess.PIPE) |
| 68433 | 696 # ignore errors that indicate the command was not found |
| 68437 | 697 if c.exception.errno not in (errno.ENOENT, errno.EACCES): |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
698 raise c.exception |
|
51721
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
699 |
|
61798
73416b1bbcd5
Issue #8780: Only backport the new test, the fix is not needed
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61014
diff
changeset
|
700 def test_issue8780(self): |
|
73416b1bbcd5
Issue #8780: Only backport the new test, the fix is not needed
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61014
diff
changeset
|
701 # Ensure that stdout is inherited from the parent |
|
73416b1bbcd5
Issue #8780: Only backport the new test, the fix is not needed
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61014
diff
changeset
|
702 # if stdout=PIPE is not used |
|
73416b1bbcd5
Issue #8780: Only backport the new test, the fix is not needed
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61014
diff
changeset
|
703 code = ';'.join(( |
|
73416b1bbcd5
Issue #8780: Only backport the new test, the fix is not needed
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61014
diff
changeset
|
704 'import subprocess, sys', |
|
73416b1bbcd5
Issue #8780: Only backport the new test, the fix is not needed
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61014
diff
changeset
|
705 'retcode = subprocess.call(' |
|
73416b1bbcd5
Issue #8780: Only backport the new test, the fix is not needed
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61014
diff
changeset
|
706 "[sys.executable, '-c', 'print(\"Hello World!\")'])", |
|
73416b1bbcd5
Issue #8780: Only backport the new test, the fix is not needed
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61014
diff
changeset
|
707 'assert retcode == 0')) |
|
73416b1bbcd5
Issue #8780: Only backport the new test, the fix is not needed
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61014
diff
changeset
|
708 output = subprocess.check_output([sys.executable, '-c', code]) |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64853
diff
changeset
|
709 self.assertTrue(output.startswith(b'Hello World!'), ascii(output)) |
|
61798
73416b1bbcd5
Issue #8780: Only backport the new test, the fix is not needed
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61014
diff
changeset
|
710 |
|
63774
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
711 def test_handles_closed_on_exception(self): |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
712 # If CreateProcess exits with an error, ensure the |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
713 # duplicate output handles are released |
|
63772
ad292fce79f9
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63727
diff
changeset
|
714 ifhandle, ifname = mkstemp() |
|
ad292fce79f9
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63727
diff
changeset
|
715 ofhandle, ofname = mkstemp() |
|
ad292fce79f9
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63727
diff
changeset
|
716 efhandle, efname = mkstemp() |
|
63774
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
717 try: |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
718 subprocess.Popen (["*"], stdin=ifhandle, stdout=ofhandle, |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
719 stderr=efhandle) |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
720 except OSError: |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
721 os.close(ifhandle) |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
722 os.remove(ifname) |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
723 os.close(ofhandle) |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
724 os.remove(ofname) |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
725 os.close(efhandle) |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
726 os.remove(efname) |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
727 self.assertFalse(os.path.exists(ifname)) |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
728 self.assertFalse(os.path.exists(ofname)) |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
729 self.assertFalse(os.path.exists(efname)) |
|
bb2608f73eb7
Issue #3210: Ensure stdio handles are closed if CreateProcess fails
Tim Golden <mail@timgolden.me.uk>
parents:
63142
diff
changeset
|
730 |
|
69154
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
731 def test_communicate_epipe(self): |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
732 # Issue 10963: communicate() should hide EPIPE |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
733 p = subprocess.Popen([sys.executable, "-c", 'pass'], |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
734 stdin=subprocess.PIPE, |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
735 stdout=subprocess.PIPE, |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
736 stderr=subprocess.PIPE) |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
737 self.addCleanup(p.stdout.close) |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
738 self.addCleanup(p.stderr.close) |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
739 self.addCleanup(p.stdin.close) |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
740 p.communicate(b"x" * 2**20) |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
741 |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
742 def test_communicate_epipe_only_stdin(self): |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
743 # Issue 10963: communicate() should hide EPIPE |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
744 p = subprocess.Popen([sys.executable, "-c", 'pass'], |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
745 stdin=subprocess.PIPE) |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
746 self.addCleanup(p.stdin.close) |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
747 time.sleep(2) |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
748 p.communicate(b"x" * 2**20) |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68980
diff
changeset
|
749 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
750 |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
751 # context manager |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
752 class _SuppressCoreFiles(object): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
753 """Try to prevent core files from being created.""" |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
754 old_limit = None |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
755 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
756 def __enter__(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
757 """Try to save previous ulimit, then set it to (0, 0).""" |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
758 try: |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
759 import resource |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
760 self.old_limit = resource.getrlimit(resource.RLIMIT_CORE) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
761 resource.setrlimit(resource.RLIMIT_CORE, (0, 0)) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
762 except (ImportError, ValueError, resource.error): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
763 pass |
|
51721
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
50074
diff
changeset
|
764 |
|
63141
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
765 if sys.platform == 'darwin': |
|
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
766 # Check if the 'Crash Reporter' on OSX was configured |
|
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
767 # in 'Developer' mode and warn that it will get triggered |
|
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
768 # when it is. |
|
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
769 # |
|
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
770 # This assumes that this context manager is used in tests |
|
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
771 # that might trigger the next manager. |
|
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
772 value = subprocess.Popen(['/usr/bin/defaults', 'read', |
|
63142
5a698a152f30
Merged revisions 83067 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63095
diff
changeset
|
773 'com.apple.CrashReporter', 'DialogType'], |
|
5a698a152f30
Merged revisions 83067 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63095
diff
changeset
|
774 stdout=subprocess.PIPE).communicate()[0] |
|
63141
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
775 if value.strip() == b'developer': |
|
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
776 print("this tests triggers the Crash Reporter, " |
|
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
777 "that is intentional", end='') |
|
2ad8e8ce46c6
Workaround for issue 4047: in some configurations of
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63094
diff
changeset
|
778 sys.stdout.flush() |
|
63142
5a698a152f30
Merged revisions 83067 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63095
diff
changeset
|
779 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
780 def __exit__(self, *args): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
781 """Return core file behavior to default.""" |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
782 if self.old_limit is None: |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
783 return |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
784 try: |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
785 import resource |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
786 resource.setrlimit(resource.RLIMIT_CORE, self.old_limit) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
787 except (ImportError, ValueError, resource.error): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
788 pass |
|
63142
5a698a152f30
Merged revisions 83067 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63095
diff
changeset
|
789 |
|
5a698a152f30
Merged revisions 83067 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
63095
diff
changeset
|
790 |
|
59340
04955e7eb597
Merged revisions 78661-78662 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59216
diff
changeset
|
791 @unittest.skipIf(mswindows, "POSIX specific tests") |
|
60057
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
792 class POSIXProcessTestCase(BaseTestCase): |
|
59340
04955e7eb597
Merged revisions 78661-78662 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59216
diff
changeset
|
793 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
794 def test_exceptions(self): |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
795 nonexistent_dir = "/_this/pa.th/does/not/exist" |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
796 try: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
797 os.chdir(nonexistent_dir) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
798 except OSError as e: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
799 # This avoids hard coding the errno value or the OS perror() |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
800 # string and instead capture the exception that we want to see |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
801 # below for comparison. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
802 desired_exception = e |
|
66307
c06ed25e69b8
add filename to ENOENT message #4925
Benjamin Peterson <benjamin@python.org>
parents:
65977
diff
changeset
|
803 desired_exception.strerror += ': ' + repr(sys.executable) |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
804 else: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
805 self.fail("chdir to nonexistant directory %s succeeded." % |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
806 nonexistent_dir) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
807 |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
808 # Error in the child re-raised in the parent. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
809 try: |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
810 p = subprocess.Popen([sys.executable, "-c", ""], |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
811 cwd=nonexistent_dir) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
812 except OSError as e: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
813 # Test that the child process chdir failure actually makes |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
814 # it up to the parent process as the correct exception. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
815 self.assertEqual(desired_exception.errno, e.errno) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
816 self.assertEqual(desired_exception.strerror, e.strerror) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
817 else: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
818 self.fail("Expected OSError: %s" % desired_exception) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
819 |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
820 def test_restore_signals(self): |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
821 # Code coverage for both values of restore_signals to make sure it |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
822 # at least does not blow up. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
823 # A test for behavior would be complex. Contributions welcome. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
824 subprocess.call([sys.executable, "-c", ""], restore_signals=True) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
825 subprocess.call([sys.executable, "-c", ""], restore_signals=False) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
826 |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
827 def test_start_new_session(self): |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
828 # For code coverage of calling setsid(). We don't care if we get an |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
829 # EPERM error from it depending on the test execution environment, that |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
830 # still indicates that it was called. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
831 try: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
832 output = subprocess.check_output( |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
833 [sys.executable, "-c", |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
834 "import os; print(os.getpgid(os.getpid()))"], |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
835 start_new_session=True) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
836 except OSError as e: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
837 if e.errno != errno.EPERM: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
838 raise |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
839 else: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
840 parent_pgid = os.getpgid(os.getpid()) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
841 child_pgid = int(output) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
842 self.assertNotEqual(parent_pgid, child_pgid) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
843 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
844 def test_run_abort(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
845 # returncode handles signal termination |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
846 with _SuppressCoreFiles(): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
847 p = subprocess.Popen([sys.executable, "-c", |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
848 'import os; os.abort()']) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
849 p.wait() |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
850 self.assertEqual(-p.returncode, signal.SIGABRT) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
851 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
852 def test_preexec(self): |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
853 # DISCLAIMER: Setting environment variables is *not* a good use |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
854 # of a preexec_fn. This is merely a test. |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
855 p = subprocess.Popen([sys.executable, "-c", |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
856 'import sys,os;' |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
857 'sys.stdout.write(os.getenv("FRUIT"))'], |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
858 stdout=subprocess.PIPE, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
859 preexec_fn=lambda: os.putenv("FRUIT", "apple")) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
860 self.addCleanup(p.stdout.close) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
861 self.assertEqual(p.stdout.read(), b"apple") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
862 |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
863 def test_preexec_exception(self): |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
864 def raise_it(): |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
865 raise ValueError("What if two swallows carried a coconut?") |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
866 try: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
867 p = subprocess.Popen([sys.executable, "-c", ""], |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
868 preexec_fn=raise_it) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
869 except RuntimeError as e: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
870 self.assertTrue( |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
871 subprocess._posixsubprocess, |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
872 "Expected a ValueError from the preexec_fn") |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
873 except ValueError as e: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
874 self.assertIn("coconut", e.args[0]) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
875 else: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
876 self.fail("Exception raised by preexec_fn did not make it " |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59507
diff
changeset
|
877 "to the parent process.") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
878 |
|
59723
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
879 @unittest.skipUnless(gc, "Requires a gc module.") |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
880 def test_preexec_gc_module_failure(self): |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
881 # This tests the code that disables garbage collection if the child |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
882 # process will execute any Python. |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
883 def raise_runtime_error(): |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
884 raise RuntimeError("this shouldn't escape") |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
885 enabled = gc.isenabled() |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
886 orig_gc_disable = gc.disable |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
887 orig_gc_isenabled = gc.isenabled |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
888 try: |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
889 gc.disable() |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
890 self.assertFalse(gc.isenabled()) |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
891 subprocess.call([sys.executable, '-c', ''], |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
892 preexec_fn=lambda: None) |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
893 self.assertFalse(gc.isenabled(), |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
894 "Popen enabled gc when it shouldn't.") |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
895 |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
896 gc.enable() |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
897 self.assertTrue(gc.isenabled()) |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
898 subprocess.call([sys.executable, '-c', ''], |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
899 preexec_fn=lambda: None) |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
900 self.assertTrue(gc.isenabled(), "Popen left gc disabled.") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
901 |
|
59723
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
902 gc.disable = raise_runtime_error |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
903 self.assertRaises(RuntimeError, subprocess.Popen, |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
904 [sys.executable, '-c', ''], |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
905 preexec_fn=lambda: None) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
906 |
|
59723
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
907 del gc.isenabled # force an AttributeError |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
908 self.assertRaises(AttributeError, subprocess.Popen, |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
909 [sys.executable, '-c', ''], |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
910 preexec_fn=lambda: None) |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
911 finally: |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
912 gc.disable = orig_gc_disable |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
913 gc.isenabled = orig_gc_isenabled |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
914 if not enabled: |
|
00daa8b736cc
* Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not
Gregory P. Smith <greg@mad-scientist.com>
parents:
59605
diff
changeset
|
915 gc.disable() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
916 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
917 def test_args_string(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
918 # args is a string |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
919 fd, fname = mkstemp() |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
920 # reopen in text mode |
|
65415
340359d80ca0
test_subprocess: use surrogateescape error handler to write shell scripts
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65302
diff
changeset
|
921 with open(fd, "w", errors="surrogateescape") as fobj: |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
922 fobj.write("#!/bin/sh\n") |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
923 fobj.write("exec '%s' -c 'import sys; sys.exit(47)'\n" % |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
924 sys.executable) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
925 os.chmod(fname, 0o700) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
926 p = subprocess.Popen(fname) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
927 p.wait() |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
928 os.remove(fname) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
929 self.assertEqual(p.returncode, 47) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
930 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
931 def test_invalid_args(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
932 # invalid arguments should raise ValueError |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
933 self.assertRaises(ValueError, subprocess.call, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
934 [sys.executable, "-c", |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
935 "import sys; sys.exit(47)"], |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
936 startupinfo=47) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
937 self.assertRaises(ValueError, subprocess.call, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
938 [sys.executable, "-c", |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
939 "import sys; sys.exit(47)"], |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
940 creationflags=47) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
941 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
942 def test_shell_sequence(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
943 # Run command through the shell (sequence) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
944 newenv = os.environ.copy() |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
945 newenv["FRUIT"] = "apple" |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
946 p = subprocess.Popen(["echo $FRUIT"], shell=1, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
947 stdout=subprocess.PIPE, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
948 env=newenv) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
949 self.addCleanup(p.stdout.close) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
950 self.assertEqual(p.stdout.read().strip(b" \t\r\n\f"), b"apple") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
951 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
952 def test_shell_string(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
953 # Run command through the shell (string) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
954 newenv = os.environ.copy() |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
955 newenv["FRUIT"] = "apple" |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
956 p = subprocess.Popen("echo $FRUIT", shell=1, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
957 stdout=subprocess.PIPE, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
958 env=newenv) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
959 self.addCleanup(p.stdout.close) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
960 self.assertEqual(p.stdout.read().strip(b" \t\r\n\f"), b"apple") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
961 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
962 def test_call_string(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
963 # call() function with string argument on UNIX |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
964 fd, fname = mkstemp() |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
965 # reopen in text mode |
|
65415
340359d80ca0
test_subprocess: use surrogateescape error handler to write shell scripts
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65302
diff
changeset
|
966 with open(fd, "w", errors="surrogateescape") as fobj: |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
967 fobj.write("#!/bin/sh\n") |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
968 fobj.write("exec '%s' -c 'import sys; sys.exit(47)'\n" % |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
969 sys.executable) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
970 os.chmod(fname, 0o700) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
971 rc = subprocess.call(fname) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
972 os.remove(fname) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
973 self.assertEqual(rc, 47) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
974 |
|
63094
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
975 def test_specific_shell(self): |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
976 # Issue #9265: Incorrect name passed as arg[0]. |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
977 shells = [] |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
978 for prefix in ['/bin', '/usr/bin/', '/usr/local/bin']: |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
979 for name in ['bash', 'ksh']: |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
980 sh = os.path.join(prefix, name) |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
981 if os.path.isfile(sh): |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
982 shells.append(sh) |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
983 if not shells: # Will probably work for any shell but csh. |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
984 self.skipTest("bash or ksh required for this test") |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
985 sh = '/bin/sh' |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
986 if os.path.isfile(sh) and not os.path.islink(sh): |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
987 # Test will fail if /bin/sh is a symlink to csh. |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
988 shells.append(sh) |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
989 for sh in shells: |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
990 p = subprocess.Popen("echo $0", executable=sh, shell=True, |
|
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
991 stdout=subprocess.PIPE) |
|
65955
6e1ae323fde6
Add cleanups to stdout/stderr pipes to remove ResourceWarnings.
Brian Curtin <brian.curtin@gmail.com>
parents:
65799
diff
changeset
|
992 self.addCleanup(p.stdout.close) |
|
63094
aa0b56dd14af
Issue #9265: Incorrect name passed as arg[0] when shell=True
Stefan Krah <stefan@bytereef.org>
parents:
62402
diff
changeset
|
993 self.assertEqual(p.stdout.read().strip(), bytes(sh, 'ascii')) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
994 |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
995 def _kill_process(self, method, *args): |
|
59376
d9e6f318568f
Merged revisions 78701 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59353
diff
changeset
|
996 # Do not inherit file handles from the parent. |
|
d9e6f318568f
Merged revisions 78701 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59353
diff
changeset
|
997 # It should fix failures on some platforms. |
|
64843
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
998 p = subprocess.Popen([sys.executable, "-c", """if 1: |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
999 import sys, time |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1000 sys.stdout.write('x\\n') |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1001 sys.stdout.flush() |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1002 time.sleep(30) |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1003 """], |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1004 close_fds=True, |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1005 stdin=subprocess.PIPE, |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1006 stdout=subprocess.PIPE, |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1007 stderr=subprocess.PIPE) |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1008 # Wait for the interpreter to be completely initialized before |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1009 # sending any signal. |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1010 p.stdout.read(1) |
|
76fd68bba1a8
Try a more robust implementation of _kill_process
Antoine Pitrou <solipsis@pitrou.net>
parents:
64842
diff
changeset
|
1011 getattr(p, method)(*args) |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1012 return p |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1013 |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1014 def test_send_signal(self): |
|
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1015 p = self._kill_process('send_signal', signal.SIGINT) |
|
60057
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
1016 _, stderr = p.communicate() |
|
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
1017 self.assertIn(b'KeyboardInterrupt', stderr) |
|
59340
04955e7eb597
Merged revisions 78661-78662 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59216
diff
changeset
|
1018 self.assertNotEqual(p.wait(), 0) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1019 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1020 def test_kill(self): |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1021 p = self._kill_process('kill') |
|
60057
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
1022 _, stderr = p.communicate() |
|
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
1023 self.assertStderrEqual(stderr, b'') |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1024 self.assertEqual(p.wait(), -signal.SIGKILL) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1025 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1026 def test_terminate(self): |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1027 p = self._kill_process('terminate') |
|
60057
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
1028 _, stderr = p.communicate() |
|
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
1029 self.assertStderrEqual(stderr, b'') |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1030 self.assertEqual(p.wait(), -signal.SIGTERM) |
|
63095
ad66eff9800b
Merged revisions 82971 via svnmerge from
Stefan Krah <stefan@bytereef.org>
parents:
62404
diff
changeset
|
1031 |
|
67310
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1032 def check_close_std_fds(self, fds): |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1033 # Issue #9905: test that subprocess pipes still work properly with |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1034 # some standard fds closed |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1035 stdin = 0 |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1036 newfds = [] |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1037 for a in fds: |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1038 b = os.dup(a) |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1039 newfds.append(b) |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1040 if a == 0: |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1041 stdin = b |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1042 try: |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1043 for fd in fds: |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1044 os.close(fd) |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1045 out, err = subprocess.Popen([sys.executable, "-c", |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1046 'import sys;' |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1047 'sys.stdout.write("apple");' |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1048 'sys.stdout.flush();' |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1049 'sys.stderr.write("orange")'], |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1050 stdin=stdin, |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1051 stdout=subprocess.PIPE, |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1052 stderr=subprocess.PIPE).communicate() |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1053 err = support.strip_python_stderr(err) |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1054 self.assertEqual((out, err), (b'apple', b'orange')) |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1055 finally: |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1056 for b, a in zip(newfds, fds): |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1057 os.dup2(b, a) |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1058 for b in newfds: |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1059 os.close(b) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1060 |
|
67310
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1061 def test_close_fd_0(self): |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1062 self.check_close_std_fds([0]) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1063 |
|
67310
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1064 def test_close_fd_1(self): |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1065 self.check_close_std_fds([1]) |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1066 |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1067 def test_close_fd_2(self): |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1068 self.check_close_std_fds([2]) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1069 |
|
67310
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1070 def test_close_fds_0_1(self): |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1071 self.check_close_std_fds([0, 1]) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1072 |
|
67310
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1073 def test_close_fds_0_2(self): |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1074 self.check_close_std_fds([0, 2]) |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1075 |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1076 def test_close_fds_1_2(self): |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1077 self.check_close_std_fds([1, 2]) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
1078 |
|
67310
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1079 def test_close_fds_0_1_2(self): |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1080 # Issue #10806: test that subprocess pipes still work properly with |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1081 # all standard fds closed. |
|
a66a6e42538f
Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
Antoine Pitrou <solipsis@pitrou.net>
parents:
67303
diff
changeset
|
1082 self.check_close_std_fds([0, 1, 2]) |
|
61014
6a90dc967fed
test_subprocess: test_undecodable_env() is specific to POSIX system
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60975
diff
changeset
|
1083 |
|
67327
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1084 def test_remapping_std_fds(self): |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1085 # open up some temporary files |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1086 temps = [mkstemp() for i in range(3)] |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1087 try: |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1088 temp_fds = [fd for fd, fname in temps] |
|
61014
6a90dc967fed
test_subprocess: test_undecodable_env() is specific to POSIX system
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60975
diff
changeset
|
1089 |
|
67327
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1090 # unlink the files -- we won't need to reopen them |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1091 for fd, fname in temps: |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1092 os.unlink(fname) |
|
61014
6a90dc967fed
test_subprocess: test_undecodable_env() is specific to POSIX system
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60975
diff
changeset
|
1093 |
|
67327
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1094 # write some data to what will become stdin, and rewind |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1095 os.write(temp_fds[1], b"STDIN") |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1096 os.lseek(temp_fds[1], 0, 0) |
|
66895
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66340
diff
changeset
|
1097 |
|
67327
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1098 # move the standard file descriptors out of the way |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1099 saved_fds = [os.dup(fd) for fd in range(3)] |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1100 try: |
|
67327
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1101 # duplicate the file objects over the standard fd's |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1102 for fd, temp_fd in enumerate(temp_fds): |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1103 os.dup2(temp_fd, fd) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1104 |
|
67327
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1105 # now use those files in the "wrong" order, so that subprocess |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1106 # has to rearrange them in the child |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1107 p = subprocess.Popen([sys.executable, "-c", |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1108 'import sys; got = sys.stdin.read();' |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1109 'sys.stdout.write("got %s"%got); sys.stderr.write("err")'], |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1110 stdin=temp_fds[1], |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1111 stdout=temp_fds[2], |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1112 stderr=temp_fds[0]) |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1113 p.wait() |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1114 finally: |
|
67327
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1115 # restore the original fd's underneath sys.stdin, etc. |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1116 for std, saved in enumerate(saved_fds): |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1117 os.dup2(saved, std) |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1118 os.close(saved) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33723
diff
changeset
|
1119 |
|
67327
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1120 for fd in temp_fds: |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1121 os.lseek(fd, 0, 0) |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1122 |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1123 out = os.read(temp_fds[2], 1024) |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1124 err = support.strip_python_stderr(os.read(temp_fds[0], 1024)) |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1125 self.assertEqual(out, b"got STDIN") |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1126 self.assertEqual(err, b"err") |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1127 |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1128 finally: |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1129 for fd in temp_fds: |
|
a7c499266a9f
Add a subprocess test of remapping standard file descriptors (issue #1187).
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1130 os.close(fd) |
|
61014
6a90dc967fed
test_subprocess: test_undecodable_env() is specific to POSIX system
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60975
diff
changeset
|
1131 |
|
60902
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1132 def test_surrogates_error_message(self): |
|
60896
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1133 def prepare(): |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1134 raise ValueError("surrogate:\uDCff") |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1135 |
|
60896
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1136 try: |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1137 subprocess.call( |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1138 [sys.executable, "-c", "pass"], |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1139 preexec_fn=prepare) |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1140 except ValueError as err: |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1141 # Pure Python implementations keeps the message |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1142 self.assertIsNone(subprocess._posixsubprocess) |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1143 self.assertEqual(str(err), "surrogate:\uDCff") |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1144 except RuntimeError as err: |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1145 # _posixsubprocess uses a default message |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1146 self.assertIsNotNone(subprocess._posixsubprocess) |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1147 self.assertEqual(str(err), "Exception occurred in preexec_fn.") |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1148 else: |
|
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60057
diff
changeset
|
1149 self.fail("Expected ValueError or RuntimeError") |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1150 |
|
60902
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1151 def test_undecodable_env(self): |
|
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1152 for key, value in (('test', 'abc\uDCFF'), ('test\uDCFF', '42')): |
|
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1153 # test str with surrogates |
|
64839
4374b1eaead1
Try to fix test_subprocess on "x86 debian parallel 3.x" buildbot
Antoine Pitrou <solipsis@pitrou.net>
parents:
64813
diff
changeset
|
1154 script = "import os; print(ascii(os.getenv(%s)))" % repr(key) |
|
60905
e79a6c802934
Fix test_undecodable_env of test_subproces for non-ASCII directory
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60902
diff
changeset
|
1155 env = os.environ.copy() |
|
e79a6c802934
Fix test_undecodable_env of test_subproces for non-ASCII directory
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60902
diff
changeset
|
1156 env[key] = value |
|
65302
e2c98c60dd64
test_subprocess doesn't need to C locale to test os.environb
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65301
diff
changeset
|
1157 # Use C locale to get ascii for the locale encoding to force |
|
e2c98c60dd64
test_subprocess doesn't need to C locale to test os.environb
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65301
diff
changeset
|
1158 # surrogate-escaping of \xFF in the child process; otherwise it can |
|
e2c98c60dd64
test_subprocess doesn't need to C locale to test os.environb
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65301
diff
changeset
|
1159 # be decoded as-is if the default locale is latin-1. |
|
65301
2853cad9cbc0
test_subprocess: use C locale to get ascii locale encoding
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65265
diff
changeset
|
1160 env['LC_ALL'] = 'C' |
|
60902
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1161 stdout = subprocess.check_output( |
|
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1162 [sys.executable, "-c", script], |
|
60905
e79a6c802934
Fix test_undecodable_env of test_subproces for non-ASCII directory
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60902
diff
changeset
|
1163 env=env) |
|
60902
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1164 stdout = stdout.rstrip(b'\n\r') |
|
66310
9fe76c26ea9f
#9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66307
diff
changeset
|
1165 self.assertEqual(stdout.decode('ascii'), ascii(value)) |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1166 |
|
60902
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1167 # test bytes |
|
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1168 key = key.encode("ascii", "surrogateescape") |
|
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1169 value = value.encode("ascii", "surrogateescape") |
|
64839
4374b1eaead1
Try to fix test_subprocess on "x86 debian parallel 3.x" buildbot
Antoine Pitrou <solipsis@pitrou.net>
parents:
64813
diff
changeset
|
1170 script = "import os; print(ascii(os.getenvb(%s)))" % repr(key) |
|
60905
e79a6c802934
Fix test_undecodable_env of test_subproces for non-ASCII directory
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60902
diff
changeset
|
1171 env = os.environ.copy() |
|
e79a6c802934
Fix test_undecodable_env of test_subproces for non-ASCII directory
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60902
diff
changeset
|
1172 env[key] = value |
|
60902
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1173 stdout = subprocess.check_output( |
|
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1174 [sys.executable, "-c", script], |
|
60905
e79a6c802934
Fix test_undecodable_env of test_subproces for non-ASCII directory
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60902
diff
changeset
|
1175 env=env) |
|
60902
dc8c8d54504e
Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60896
diff
changeset
|
1176 stdout = stdout.rstrip(b'\n\r') |
|
66310
9fe76c26ea9f
#9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66307
diff
changeset
|
1177 self.assertEqual(stdout.decode('ascii'), ascii(value)) |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1178 |
|
61693
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1179 def test_bytes_program(self): |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1180 abs_program = os.fsencode(sys.executable) |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1181 path, program = os.path.split(sys.executable) |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1182 program = os.fsencode(program) |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1183 |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1184 # absolute bytes path |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1185 exitcode = subprocess.call([abs_program, "-c", "pass"]) |
|
66310
9fe76c26ea9f
#9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66307
diff
changeset
|
1186 self.assertEqual(exitcode, 0) |
|
61693
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1187 |
|
68214
738feec9ced0
Issue #8513: On UNIX, subprocess supports bytes command string.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68142
diff
changeset
|
1188 # absolute bytes path as a string |
|
738feec9ced0
Issue #8513: On UNIX, subprocess supports bytes command string.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68142
diff
changeset
|
1189 cmd = b"'" + abs_program + b"' -c pass" |
|
738feec9ced0
Issue #8513: On UNIX, subprocess supports bytes command string.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68142
diff
changeset
|
1190 exitcode = subprocess.call(cmd, shell=True) |
|
738feec9ced0
Issue #8513: On UNIX, subprocess supports bytes command string.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68142
diff
changeset
|
1191 self.assertEqual(exitcode, 0) |
|
738feec9ced0
Issue #8513: On UNIX, subprocess supports bytes command string.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68142
diff
changeset
|
1192 |
|
61693
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1193 # bytes program, unicode PATH |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1194 env = os.environ.copy() |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1195 env["PATH"] = path |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1196 exitcode = subprocess.call([program, "-c", "pass"], env=env) |
|
66310
9fe76c26ea9f
#9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66307
diff
changeset
|
1197 self.assertEqual(exitcode, 0) |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1198 |
|
61693
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1199 # bytes program, bytes PATH |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1200 envb = os.environb.copy() |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1201 envb[b"PATH"] = os.fsencode(path) |
|
cf74ec3e1f82
Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61332
diff
changeset
|
1202 exitcode = subprocess.call([program, "-c", "pass"], env=envb) |
|
66310
9fe76c26ea9f
#9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66307
diff
changeset
|
1203 self.assertEqual(exitcode, 0) |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1204 |
|
66868
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1205 def test_pipe_cloexec(self): |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1206 sleeper = support.findfile("input_reader.py", subdir="subprocessdata") |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1207 fd_status = support.findfile("fd_status.py", subdir="subprocessdata") |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1208 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1209 p1 = subprocess.Popen([sys.executable, sleeper], |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1210 stdin=subprocess.PIPE, stdout=subprocess.PIPE, |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1211 stderr=subprocess.PIPE, close_fds=False) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1212 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1213 self.addCleanup(p1.communicate, b'') |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1214 |
|
66868
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1215 p2 = subprocess.Popen([sys.executable, fd_status], |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1216 stdout=subprocess.PIPE, close_fds=False) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1217 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1218 output, error = p2.communicate() |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1219 result_fds = set(map(int, output.split(b','))) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1220 unwanted_fds = set([p1.stdin.fileno(), p1.stdout.fileno(), |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1221 p1.stderr.fileno()]) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1222 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1223 self.assertFalse(result_fds & unwanted_fds, |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1224 "Expected no fds from %r to be open in child, " |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1225 "found %r" % |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1226 (unwanted_fds, result_fds & unwanted_fds)) |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1227 |
|
66868
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1228 def test_pipe_cloexec_real_tools(self): |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1229 qcat = support.findfile("qcat.py", subdir="subprocessdata") |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1230 qgrep = support.findfile("qgrep.py", subdir="subprocessdata") |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1231 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1232 subdata = b'zxcvbn' |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1233 data = subdata * 4 + b'\n' |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1234 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1235 p1 = subprocess.Popen([sys.executable, qcat], |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1236 stdin=subprocess.PIPE, stdout=subprocess.PIPE, |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1237 close_fds=False) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1238 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1239 p2 = subprocess.Popen([sys.executable, qgrep, subdata], |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1240 stdin=p1.stdout, stdout=subprocess.PIPE, |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1241 close_fds=False) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1242 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1243 self.addCleanup(p1.wait) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1244 self.addCleanup(p2.wait) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1245 self.addCleanup(p1.terminate) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1246 self.addCleanup(p2.terminate) |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1247 |
|
66868
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1248 p1.stdin.write(data) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1249 p1.stdin.close() |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1250 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1251 readfiles, ignored1, ignored2 = select.select([p2.stdout], [], [], 10) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1252 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1253 self.assertTrue(readfiles, "The child hung") |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1254 self.assertEqual(p2.stdout.read(), data) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1255 |
|
67303
77483f3e491a
test_subprocess: close pipes at the end of test_pipe_cloexec_real_tools()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
67130
diff
changeset
|
1256 p1.stdout.close() |
|
77483f3e491a
test_subprocess: close pipes at the end of test_pipe_cloexec_real_tools()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
67130
diff
changeset
|
1257 p2.stdout.close() |
|
77483f3e491a
test_subprocess: close pipes at the end of test_pipe_cloexec_real_tools()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
67130
diff
changeset
|
1258 |
|
66868
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1259 def test_close_fds(self): |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1260 fd_status = support.findfile("fd_status.py", subdir="subprocessdata") |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1261 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1262 fds = os.pipe() |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1263 self.addCleanup(os.close, fds[0]) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1264 self.addCleanup(os.close, fds[1]) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1265 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1266 open_fds = set(fds) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1267 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1268 p = subprocess.Popen([sys.executable, fd_status], |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1269 stdout=subprocess.PIPE, close_fds=False) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1270 output, ignored = p.communicate() |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1271 remaining_fds = set(map(int, output.split(b','))) |
|
66895
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66340
diff
changeset
|
1272 |
|
66868
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1273 self.assertEqual(remaining_fds & open_fds, open_fds, |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1274 "Some fds were closed") |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1275 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1276 p = subprocess.Popen([sys.executable, fd_status], |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1277 stdout=subprocess.PIPE, close_fds=True) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1278 output, ignored = p.communicate() |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1279 remaining_fds = set(map(int, output.split(b','))) |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1280 |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1281 self.assertFalse(remaining_fds & open_fds, |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1282 "Some fds were left open") |
|
de05d846795e
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66867
diff
changeset
|
1283 self.assertIn(1, remaining_fds, "Subprocess failed") |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1284 |
|
70575
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70554
diff
changeset
|
1285 # Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70554
diff
changeset
|
1286 # descriptor of a pipe closed in the parent process is valid in the |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70554
diff
changeset
|
1287 # child process according to fstat(), but the mode of the file |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70554
diff
changeset
|
1288 # descriptor is invalid, and read or write raise an error. |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70554
diff
changeset
|
1289 @support.requires_mac_ver(10, 5) |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1290 def test_pass_fds(self): |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1291 fd_status = support.findfile("fd_status.py", subdir="subprocessdata") |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1292 |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1293 open_fds = set() |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1294 |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1295 for x in range(5): |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1296 fds = os.pipe() |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1297 self.addCleanup(os.close, fds[0]) |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1298 self.addCleanup(os.close, fds[1]) |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1299 open_fds.update(fds) |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1300 |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1301 for fd in open_fds: |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1302 p = subprocess.Popen([sys.executable, fd_status], |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1303 stdout=subprocess.PIPE, close_fds=True, |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1304 pass_fds=(fd, )) |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1305 output, ignored = p.communicate() |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1306 |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1307 remaining_fds = set(map(int, output.split(b','))) |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1308 to_be_closed = open_fds - {fd} |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1309 |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1310 self.assertIn(fd, remaining_fds, "fd to be passed not passed") |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1311 self.assertFalse(remaining_fds & to_be_closed, |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1312 "fd to be closed passed") |
|
66895
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66340
diff
changeset
|
1313 |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1314 # pass_fds overrides close_fds with a warning. |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1315 with self.assertWarns(RuntimeWarning) as context: |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1316 self.assertFalse(subprocess.call( |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1317 [sys.executable, "-c", "import sys; sys.exit(0)"], |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1318 close_fds=False, pass_fds=(fd, ))) |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1319 self.assertIn('overriding close_fds', str(context.warning)) |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1320 |
|
68526
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1321 def test_stdout_stdin_are_single_inout_fd(self): |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1322 with io.open(os.devnull, "r+") as inout: |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1323 p = subprocess.Popen([sys.executable, "-c", "import sys; sys.exit(0)"], |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1324 stdout=inout, stdin=inout) |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1325 p.wait() |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1326 |
|
68526
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1327 def test_stdout_stderr_are_single_inout_fd(self): |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1328 with io.open(os.devnull, "r+") as inout: |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1329 p = subprocess.Popen([sys.executable, "-c", "import sys; sys.exit(0)"], |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1330 stdout=inout, stderr=inout) |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1331 p.wait() |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1332 |
|
68526
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1333 def test_stderr_stdin_are_single_inout_fd(self): |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1334 with io.open(os.devnull, "r+") as inout: |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1335 p = subprocess.Popen([sys.executable, "-c", "import sys; sys.exit(0)"], |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1336 stderr=inout, stdin=inout) |
|
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1337 p.wait() |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1338 |
|
66893
767420808a62
Issue #1731717: Fixed the problem where subprocess.wait() could cause an
Gregory P. Smith <greg@mad-scientist.com>
parents:
66889
diff
changeset
|
1339 def test_wait_when_sigchild_ignored(self): |
|
767420808a62
Issue #1731717: Fixed the problem where subprocess.wait() could cause an
Gregory P. Smith <greg@mad-scientist.com>
parents:
66889
diff
changeset
|
1340 # NOTE: sigchild_ignore.py may not be an effective test on all OSes. |
|
767420808a62
Issue #1731717: Fixed the problem where subprocess.wait() could cause an
Gregory P. Smith <greg@mad-scientist.com>
parents:
66889
diff
changeset
|
1341 sigchild_ignore = support.findfile("sigchild_ignore.py", |
|
767420808a62
Issue #1731717: Fixed the problem where subprocess.wait() could cause an
Gregory P. Smith <greg@mad-scientist.com>
parents:
66889
diff
changeset
|
1342 subdir="subprocessdata") |
|
767420808a62
Issue #1731717: Fixed the problem where subprocess.wait() could cause an
Gregory P. Smith <greg@mad-scientist.com>
parents:
66889
diff
changeset
|
1343 p = subprocess.Popen([sys.executable, sigchild_ignore], |
|
767420808a62
Issue #1731717: Fixed the problem where subprocess.wait() could cause an
Gregory P. Smith <greg@mad-scientist.com>
parents:
66889
diff
changeset
|
1344 stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
|
767420808a62
Issue #1731717: Fixed the problem where subprocess.wait() could cause an
Gregory P. Smith <greg@mad-scientist.com>
parents:
66889
diff
changeset
|
1345 stdout, stderr = p.communicate() |
|
767420808a62
Issue #1731717: Fixed the problem where subprocess.wait() could cause an
Gregory P. Smith <greg@mad-scientist.com>
parents:
66889
diff
changeset
|
1346 self.assertEqual(0, p.returncode, "sigchild_ignore.py exited" |
|
66896
12381f19e2ad
Fix "BytesWarning: str() on a bytes instance"
Gregory P. Smith <greg@mad-scientist.com>
parents:
66893
diff
changeset
|
1347 " non-zero with this error:\n%s" % |
|
68142
be6c38d1817b
Normalize the encoding names for Latin-1 and UTF-8 to
Marc-André Lemburg <mal@egenix.com>
parents:
68088
diff
changeset
|
1348 stderr.decode('utf-8')) |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66897
diff
changeset
|
1349 |
|
68680
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1350 def test_select_unbuffered(self): |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1351 # Issue #11459: bufsize=0 should really set the pipes as |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1352 # unbuffered (and therefore let select() work properly). |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1353 select = support.import_module("select") |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1354 p = subprocess.Popen([sys.executable, "-c", |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1355 'import sys;' |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1356 'sys.stdout.write("apple")'], |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1357 stdout=subprocess.PIPE, |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1358 bufsize=0) |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1359 f = p.stdout |
| 68981 | 1360 self.addCleanup(f.close) |
|
68680
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1361 try: |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1362 self.assertEqual(f.read(4), b"appl") |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1363 self.assertIn(f, select.select([f], [], [], 0.0)[0]) |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1364 finally: |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1365 p.wait() |
|
7451da272111
Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1366 |
|
66895
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
66340
diff
changeset
|
1367 |
|
59340
04955e7eb597
Merged revisions 78661-78662 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59216
diff
changeset
|
1368 @unittest.skipUnless(mswindows, "Windows specific tests") |
|
60057
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
1369 class Win32ProcessTestCase(BaseTestCase): |
|
59340
04955e7eb597
Merged revisions 78661-78662 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59216
diff
changeset
|
1370 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1371 def test_startupinfo(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1372 # startupinfo argument |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1373 # We uses hardcoded constants, because we do not want to |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1374 # depend on win32all. |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1375 STARTF_USESHOWWINDOW = 1 |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1376 SW_MAXIMIZE = 3 |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1377 startupinfo = subprocess.STARTUPINFO() |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1378 startupinfo.dwFlags = STARTF_USESHOWWINDOW |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1379 startupinfo.wShowWindow = SW_MAXIMIZE |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1380 # Since Python is a console process, it won't be affected |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1381 # by wShowWindow, but the argument should be silently |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1382 # ignored |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1383 subprocess.call([sys.executable, "-c", "import sys; sys.exit(0)"], |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1384 startupinfo=startupinfo) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1385 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1386 def test_creationflags(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1387 # creationflags argument |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1388 CREATE_NEW_CONSOLE = 16 |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1389 sys.stderr.write(" a DOS box should flash briefly ...\n") |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1390 subprocess.call(sys.executable + |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1391 ' -c "import time; time.sleep(0.25)"', |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1392 creationflags=CREATE_NEW_CONSOLE) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1393 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1394 def test_invalid_args(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1395 # invalid arguments should raise ValueError |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1396 self.assertRaises(ValueError, subprocess.call, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1397 [sys.executable, "-c", |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1398 "import sys; sys.exit(47)"], |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1399 preexec_fn=lambda: 1) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1400 self.assertRaises(ValueError, subprocess.call, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1401 [sys.executable, "-c", |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1402 "import sys; sys.exit(47)"], |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1403 stdout=subprocess.PIPE, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1404 close_fds=True) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1405 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1406 def test_close_fds(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1407 # close file descriptors |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1408 rc = subprocess.call([sys.executable, "-c", |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1409 "import sys; sys.exit(47)"], |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1410 close_fds=True) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1411 self.assertEqual(rc, 47) |
|
41969
9d02a4adf574
Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41845
diff
changeset
|
1412 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1413 def test_shell_sequence(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1414 # Run command through the shell (sequence) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1415 newenv = os.environ.copy() |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1416 newenv["FRUIT"] = "physalis" |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1417 p = subprocess.Popen(["set"], shell=1, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1418 stdout=subprocess.PIPE, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1419 env=newenv) |
|
65977
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
1420 self.addCleanup(p.stdout.close) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1421 self.assertIn(b"physalis", p.stdout.read()) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1422 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1423 def test_shell_string(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1424 # Run command through the shell (string) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1425 newenv = os.environ.copy() |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1426 newenv["FRUIT"] = "physalis" |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1427 p = subprocess.Popen("set", shell=1, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1428 stdout=subprocess.PIPE, |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1429 env=newenv) |
|
65977
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
1430 self.addCleanup(p.stdout.close) |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1431 self.assertIn(b"physalis", p.stdout.read()) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1432 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1433 def test_call_string(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1434 # call() function with string argument on Windows |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1435 rc = subprocess.call(sys.executable + |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1436 ' -c "import sys; sys.exit(47)"') |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1437 self.assertEqual(rc, 47) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1438 |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1439 def _kill_process(self, method, *args): |
|
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1440 # Some win32 buildbot raises EOFError if stdin is inherited |
|
64927
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1441 p = subprocess.Popen([sys.executable, "-c", """if 1: |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1442 import sys, time |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1443 sys.stdout.write('x\\n') |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1444 sys.stdout.flush() |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1445 time.sleep(30) |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1446 """], |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1447 stdin=subprocess.PIPE, |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1448 stdout=subprocess.PIPE, |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1449 stderr=subprocess.PIPE) |
|
65977
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
1450 self.addCleanup(p.stdout.close) |
|
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
1451 self.addCleanup(p.stderr.close) |
|
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
1452 self.addCleanup(p.stdin.close) |
|
64927
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1453 # Wait for the interpreter to be completely initialized before |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1454 # sending any signal. |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1455 p.stdout.read(1) |
|
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1456 getattr(p, method)(*args) |
|
60057
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
1457 _, stderr = p.communicate() |
|
bb2ca1b63321
Merged revisions 79344,79346,79350 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59723
diff
changeset
|
1458 self.assertStderrEqual(stderr, b'') |
|
64927
f6a0eb730a9b
Make _kill_process more robust under Windows too (see issue #8432)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64843
diff
changeset
|
1459 returncode = p.wait() |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1460 self.assertNotEqual(returncode, 0) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1461 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1462 def test_send_signal(self): |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1463 self._kill_process('send_signal', signal.SIGTERM) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1464 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1465 def test_kill(self): |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1466 self._kill_process('kill') |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1467 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1468 def test_terminate(self): |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59398
diff
changeset
|
1469 self._kill_process('terminate') |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1470 |
|
63930
8499ae5d9719
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63843
diff
changeset
|
1471 |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
47303
diff
changeset
|
1472 # The module says: |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
47303
diff
changeset
|
1473 # "NB This only works (and is only relevant) for UNIX." |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
47303
diff
changeset
|
1474 # |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
47303
diff
changeset
|
1475 # Actually, getoutput should work on any platform with an os.popen, but |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
47303
diff
changeset
|
1476 # I'll take the comment as given, and skip this suite. |
|
59340
04955e7eb597
Merged revisions 78661-78662 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59216
diff
changeset
|
1477 @unittest.skipUnless(os.name == 'posix', "only relevant for UNIX") |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1478 class CommandTests(unittest.TestCase): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1479 def test_getoutput(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1480 self.assertEqual(subprocess.getoutput('echo xyzzy'), 'xyzzy') |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1481 self.assertEqual(subprocess.getstatusoutput('echo xyzzy'), |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1482 (0, 'xyzzy')) |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
47303
diff
changeset
|
1483 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1484 # we use mkdtemp in the next line to create an empty directory |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1485 # under our exclusive control; from that, we can invent a pathname |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1486 # that we _know_ won't exist. This is guaranteed to fail. |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1487 dir = None |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1488 try: |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1489 dir = tempfile.mkdtemp() |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1490 name = os.path.join(dir, "foo") |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
47303
diff
changeset
|
1491 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1492 status, output = subprocess.getstatusoutput('cat ' + name) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1493 self.assertNotEqual(status, 0) |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1494 finally: |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1495 if dir is not None: |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1496 os.rmdir(dir) |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
47303
diff
changeset
|
1497 |
|
55602
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
55593
diff
changeset
|
1498 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1499 @unittest.skipUnless(getattr(subprocess, '_has_poll', False), |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1500 "poll system call not supported") |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1501 class ProcessTestCaseNoPoll(ProcessTestCase): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1502 def setUp(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1503 subprocess._has_poll = False |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1504 ProcessTestCase.setUp(self) |
|
63930
8499ae5d9719
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63843
diff
changeset
|
1505 |
|
59193
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1506 def tearDown(self): |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1507 subprocess._has_poll = True |
|
01c58cef82d4
Recorded merge of revisions 78508-78509 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
1508 ProcessTestCase.tearDown(self) |
|
63930
8499ae5d9719
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63843
diff
changeset
|
1509 |
|
8499ae5d9719
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63843
diff
changeset
|
1510 |
|
59209
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1511 class HelperFunctionTests(unittest.TestCase): |
|
59217
d1c62882c73b
Merged revisions 78533 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
59209
diff
changeset
|
1512 @unittest.skipIf(mswindows, "errno and EINTR make no sense on windows") |
|
59209
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1513 def test_eintr_retry_call(self): |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1514 record_calls = [] |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1515 def fake_os_func(*args): |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1516 record_calls.append(args) |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1517 if len(record_calls) == 2: |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1518 raise OSError(errno.EINTR, "fake interrupted system call") |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1519 return tuple(reversed(args)) |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1520 |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1521 self.assertEqual((999, 256), |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1522 subprocess._eintr_retry_call(fake_os_func, 256, 999)) |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1523 self.assertEqual([(256, 999)], record_calls) |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1524 # This time there will be an EINTR so it will loop once. |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1525 self.assertEqual((666,), |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1526 subprocess._eintr_retry_call(fake_os_func, 666)) |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1527 self.assertEqual([(256, 999), (666,), (666,)], record_calls) |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1528 |
|
59207
55778855cd25
Merged revisions 78523 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
59193
diff
changeset
|
1529 |
|
63922
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1530 @unittest.skipUnless(mswindows, "Windows-specific tests") |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1531 class CommandsWithSpaces (BaseTestCase): |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1532 |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1533 def setUp(self): |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1534 super().setUp() |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1535 f, fname = mkstemp(".py", "te st") |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1536 self.fname = fname.lower () |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1537 os.write(f, b"import sys;" |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1538 b"sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv]))" |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1539 ) |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1540 os.close(f) |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1541 |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1542 def tearDown(self): |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1543 os.remove(self.fname) |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1544 super().tearDown() |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1545 |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1546 def with_spaces(self, *args, **kwargs): |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1547 kwargs['stdout'] = subprocess.PIPE |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1548 p = subprocess.Popen(*args, **kwargs) |
|
65977
fe8962fc0e11
Fix a number of ResourceWarnings on Windows due to open pipes.
Brian Curtin <brian.curtin@gmail.com>
parents:
65955
diff
changeset
|
1549 self.addCleanup(p.stdout.close) |
|
63922
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1550 self.assertEqual( |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1551 p.stdout.read ().decode("mbcs"), |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1552 "2 [%r, 'ab cd']" % self.fname |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1553 ) |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1554 |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1555 def test_shell_string_with_spaces(self): |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1556 # call() function with string argument with spaces on Windows |
|
63956
aa9c8e82c435
Fix #9588. Add sys.executable to two shell=True tests.
Brian Curtin <brian.curtin@gmail.com>
parents:
63922
diff
changeset
|
1557 self.with_spaces('"%s" "%s" "%s"' % (sys.executable, self.fname, |
|
aa9c8e82c435
Fix #9588. Add sys.executable to two shell=True tests.
Brian Curtin <brian.curtin@gmail.com>
parents:
63922
diff
changeset
|
1558 "ab cd"), shell=1) |
|
63922
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1559 |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1560 def test_shell_sequence_with_spaces(self): |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1561 # call() function with sequence argument with spaces on Windows |
|
63956
aa9c8e82c435
Fix #9588. Add sys.executable to two shell=True tests.
Brian Curtin <brian.curtin@gmail.com>
parents:
63922
diff
changeset
|
1562 self.with_spaces([sys.executable, self.fname, "ab cd"], shell=1) |
|
63922
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1563 |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1564 def test_noshell_string_with_spaces(self): |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1565 # call() function with string argument with spaces on Windows |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1566 self.with_spaces('"%s" "%s" "%s"' % (sys.executable, self.fname, |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1567 "ab cd")) |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1568 |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1569 def test_noshell_sequence_with_spaces(self): |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1570 # call() function with sequence argument with spaces on Windows |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1571 self.with_spaces([sys.executable, self.fname, "ab cd"]) |
|
56066a5825ca
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63840
diff
changeset
|
1572 |
|
66622
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1573 |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1574 class ContextManagerTests(ProcessTestCase): |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1575 |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1576 def test_pipe(self): |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1577 with subprocess.Popen([sys.executable, "-c", |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1578 "import sys;" |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1579 "sys.stdout.write('stdout');" |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1580 "sys.stderr.write('stderr');"], |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1581 stdout=subprocess.PIPE, |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1582 stderr=subprocess.PIPE) as proc: |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1583 self.assertEqual(proc.stdout.read(), b"stdout") |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1584 self.assertStderrEqual(proc.stderr.read(), b"stderr") |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1585 |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1586 self.assertTrue(proc.stdout.closed) |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1587 self.assertTrue(proc.stderr.closed) |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1588 |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1589 def test_returncode(self): |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1590 with subprocess.Popen([sys.executable, "-c", |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1591 "import sys; sys.exit(100)"]) as proc: |
|
70049
b00a64a5cb93
merge - 7a3f3ad83676 Fixes Issue #12044.
Gregory P. Smith <greg@krypto.org>
parents:
69155
diff
changeset
|
1592 pass |
|
b00a64a5cb93
merge - 7a3f3ad83676 Fixes Issue #12044.
Gregory P. Smith <greg@krypto.org>
parents:
69155
diff
changeset
|
1593 # __exit__ calls wait(), so the returncode should be set |
|
66622
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1594 self.assertEqual(proc.returncode, 100) |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1595 |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1596 def test_communicate_stdin(self): |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1597 with subprocess.Popen([sys.executable, "-c", |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1598 "import sys;" |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1599 "sys.exit(sys.stdin.read() == 'context')"], |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1600 stdin=subprocess.PIPE) as proc: |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1601 proc.communicate(b"context") |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1602 self.assertEqual(proc.returncode, 1) |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1603 |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1604 def test_invalid_args(self): |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1605 with self.assertRaises(EnvironmentError) as c: |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1606 with subprocess.Popen(['nonexisting_i_hope'], |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1607 stdout=subprocess.PIPE, |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1608 stderr=subprocess.PIPE) as proc: |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1609 pass |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1610 |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1611 if c.exception.errno != errno.ENOENT: # ignore "no such file" |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1612 raise c.exception |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66310
diff
changeset
|
1613 |
|
59209
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55626
diff
changeset
|
1614 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1615 def test_main(): |
|
68527
8c79e3abdb31
revert the test_main() change from 08daf3ef6509 so that regrtest continues to run this properly.
Gregory P. Smith <greg@krypto.org>
parents:
68526
diff
changeset
|
1616 unit_tests = (ProcessTestCase, |
|
8c79e3abdb31
revert the test_main() change from 08daf3ef6509 so that regrtest continues to run this properly.
Gregory P. Smith <greg@krypto.org>
parents:
68526
diff
changeset
|
1617 POSIXProcessTestCase, |
|
8c79e3abdb31
revert the test_main() change from 08daf3ef6509 so that regrtest continues to run this properly.
Gregory P. Smith <greg@krypto.org>
parents:
68526
diff
changeset
|
1618 Win32ProcessTestCase, |
|
8c79e3abdb31
revert the test_main() change from 08daf3ef6509 so that regrtest continues to run this properly.
Gregory P. Smith <greg@krypto.org>
parents:
68526
diff
changeset
|
1619 CommandTests, |
|
8c79e3abdb31
revert the test_main() change from 08daf3ef6509 so that regrtest continues to run this properly.
Gregory P. Smith <greg@krypto.org>
parents:
68526
diff
changeset
|
1620 ProcessTestCaseNoPoll, |
|
8c79e3abdb31
revert the test_main() change from 08daf3ef6509 so that regrtest continues to run this properly.
Gregory P. Smith <greg@krypto.org>
parents:
68526
diff
changeset
|
1621 HelperFunctionTests, |
|
8c79e3abdb31
revert the test_main() change from 08daf3ef6509 so that regrtest continues to run this properly.
Gregory P. Smith <greg@krypto.org>
parents:
68526
diff
changeset
|
1622 CommandsWithSpaces, |
|
8c79e3abdb31
revert the test_main() change from 08daf3ef6509 so that regrtest continues to run this properly.
Gregory P. Smith <greg@krypto.org>
parents:
68526
diff
changeset
|
1623 ContextManagerTests) |
|
8c79e3abdb31
revert the test_main() change from 08daf3ef6509 so that regrtest continues to run this properly.
Gregory P. Smith <greg@krypto.org>
parents:
68526
diff
changeset
|
1624 |
|
55602
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
55593
diff
changeset
|
1625 support.run_unittest(*unit_tests) |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
47303
diff
changeset
|
1626 support.reap_children() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1627 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1628 if __name__ == "__main__": |
|
68526
ad2bd8d338b0
Add unittests demonstrating issue #11432.
Gregory P. Smith <greg@krypto.org>
parents:
68492
diff
changeset
|
1629 unittest.main() |
