# test_tkinter_pipe.py import unittest import subprocess import sys from test import support @unittest.skipUnless(support.has_subprocess_support, "test requires subprocess") class TkinterPipeTest(unittest.TestCase): def test_tkinter_pipe_buffered(self): args = [sys.executable, "-i"] proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) proc.stdin.write(b"import tkinter\n") proc.stdin.write(b"interpreter = tkinter.Tcl()\n") proc.stdin.write(b"print('hello')\n") proc.stdin.write(b"print('goodbye')\n") proc.stdin.write(b"quit()\n") stdout, stderr = proc.communicate(timeout=support.SHORT_TIMEOUT) stdout = stdout.decode() self.assertEqual(stdout.split(), ['hello', 'goodbye']) def test_tkinter_pipe_unbuffered(self): args = [sys.executable, "-i", "-u"] proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) proc.stdin.write(b"import tkinter\n") proc.stdin.write(b"interpreter = tkinter.Tcl()\n") proc.stdin.write(b"print('hello')\n") proc.stdin.flush() stdout = proc.stdout.readline() stdout = stdout.decode() self.assertEqual(stdout.strip(), 'hello') proc.stdin.write(b"print('hello again')\n") proc.stdin.flush() stdout = proc.stdout.readline() stdout = stdout.decode() self.assertEqual(stdout.strip(), 'hello again') proc.stdin.write(b"print('goodbye')\n") proc.stdin.write(b"quit()\n") stdout, stderr = proc.communicate(timeout=support.SHORT_TIMEOUT) stdout = stdout.decode() self.assertEqual(stdout.strip(), 'goodbye') if __name__ == "__main__": unittest.main()