0
votes

My case is a little bit specific. I'm trying to run a Python program using Python for testing purposes. The case is as follows:

# file1.py
print("Hello world")
# file1.test.py
import io
import sys
import unittest

EXPECTED_OUTPUT = "Hello world"

class TestHello(unittest.TestCase):
    def test_hello(self):
        sio = io.StringIO()
        sys.stdout = sio
        os.system("python3 path/to/file1.py")
        sys.stdout = sys.__stdout__
        print("captured value:", sio.getvalue())
        self.assertEqual(sio.getvalue(), EXPECTED_STDOUT)

if __name__ == "__main__":
    unittest.main()

But nothing ends up in the sio variable. This way and similar ways are introduced online but they don't seem to work for me. My Python version is 3.8.10 but it doesn't really matter if this works better in some other version, I can switch to that.

Note: I know that if I was using an importable object this might be easier, but right now I need to know how to catch the output of another file.

Thanks!