@@ -1846,6 +1846,7 @@ def run_child(self, child, terminal_input):
1846
1846
os .close (w )
1847
1847
self .skipTest ("pty.fork() raised {}" .format (e ))
1848
1848
raise
1849
+
1849
1850
if pid == 0 :
1850
1851
# Child
1851
1852
try :
@@ -1859,9 +1860,11 @@ def run_child(self, child, terminal_input):
1859
1860
finally :
1860
1861
# We don't want to return to unittest...
1861
1862
os ._exit (0 )
1863
+
1862
1864
# Parent
1863
1865
os .close (w )
1864
1866
os .write (fd , terminal_input )
1867
+
1865
1868
# Get results from the pipe
1866
1869
with open (r , "r" ) as rpipe :
1867
1870
lines = []
@@ -1871,6 +1874,7 @@ def run_child(self, child, terminal_input):
1871
1874
# The other end was closed => the child exited
1872
1875
break
1873
1876
lines .append (line )
1877
+
1874
1878
# Check the result was got and corresponds to the user's terminal input
1875
1879
if len (lines ) != 2 :
1876
1880
# Something went wrong, try to get at stderr
@@ -1888,11 +1892,14 @@ def run_child(self, child, terminal_input):
1888
1892
child_output = child_output .decode ("ascii" , "ignore" )
1889
1893
self .fail ("got %d lines in pipe but expected 2, child output was:\n %s"
1890
1894
% (len (lines ), child_output ))
1891
- os .close (fd )
1892
1895
1893
- # Wait until the child process completes
1896
+ # Wait until the child process completes before closing the PTY to
1897
+ # prevent sending SIGHUP to the child process.
1894
1898
support .wait_process (pid , exitcode = 0 )
1895
1899
1900
+ # Close the PTY
1901
+ os .close (fd )
1902
+
1896
1903
return lines
1897
1904
1898
1905
def check_input_tty (self , prompt , terminal_input , stdio_encoding = None ):
0 commit comments