Switch to check the specific log output from stdout (#35547)

diff --git a/src/python_testing/TC_MCORE_FS_1_4.py b/src/python_testing/TC_MCORE_FS_1_4.py
index e633735..c776bd2 100644
--- a/src/python_testing/TC_MCORE_FS_1_4.py
+++ b/src/python_testing/TC_MCORE_FS_1_4.py
@@ -47,32 +47,6 @@
 from matter_testing_support import MatterBaseTest, TestStep, async_test_body, default_matter_test_main, type_matches
 from mobly import asserts
 
-
-async def wait_for_server_initialization(server_port, timeout=5):
-    """Wait until the server is ready by checking if it opens the expected port."""
-    start_time = asyncio.get_event_loop().time()
-    elapsed_time = 0
-    retry_interval = 1
-
-    logging.info(f"Waiting for server to initialize on TCP port {server_port} for up to {timeout} seconds.")
-
-    while elapsed_time < timeout:
-        try:
-            # Try connecting to the server to check if it's ready
-            reader, writer = await asyncio.open_connection('::1', server_port)
-            writer.close()
-            await writer.wait_closed()
-            logging.info(f"TH_SERVER_NO_UID is initialized and ready on port {server_port}.")
-            return
-        except (ConnectionRefusedError, OSError) as e:
-            logging.warning(f"Connection to port {server_port} failed: {e}. Retrying in {retry_interval} seconds...")
-
-        await asyncio.sleep(retry_interval)
-        elapsed_time = asyncio.get_event_loop().time() - start_time
-
-    raise TimeoutError(f"Server on port {server_port} did not initialize within {timeout} seconds. "
-                       f"Total time waited: {elapsed_time} seconds.")
-
 # TODO: Make this class more generic. Issue #35348
 
 
@@ -174,16 +148,32 @@
 
 class AppServer:
 
+    def _process_admin_output(self, line):
+        if self.wait_for_text_text is not None and self.wait_for_text_text in line:
+            self.wait_for_text_event.set()
+
+    def wait_for_text(self, timeout=30):
+        if not self.wait_for_text_event.wait(timeout=timeout):
+            raise Exception(f"Timeout waiting for text: {self.wait_for_text_text}")
+        self.wait_for_text_event.clear()
+        self.wait_for_text_text = None
+
     def __init__(self, app, storage_dir, port=None, discriminator=None, passcode=None):
+        self.wait_for_text_event = threading.Event()
+        self.wait_for_text_text = None
 
         args = [app]
         args.extend(["--KVS", tempfile.mkstemp(dir=storage_dir, prefix="kvs-app-")[1]])
         args.extend(['--secured-device-port', str(port)])
         args.extend(["--discriminator", str(discriminator)])
         args.extend(["--passcode", str(passcode)])
-        self.app = Subprocess(args, tag="SERVER")
+        self.app = Subprocess(args, stdout_cb=self._process_admin_output, tag="SERVER")
+        self.wait_for_text_text = "Server initialization complete"
         self.app.start()
 
+        # Wait for the server-app to be ready.
+        self.wait_for_text()
+
     def stop(self):
         self.app.stop()
 
@@ -265,12 +255,6 @@
             discriminator=self.th_server_discriminator,
             passcode=self.th_server_passcode)
 
-        # Wait for TH_SERVER_NO_UID get initialized.
-        try:
-            asyncio.run(wait_for_server_initialization(self.th_server_port))
-        except TimeoutError:
-            asserts.fail(f"TH_SERVER_NO_UID server failed to open port {self.th_server_port}")
-
     def teardown_class(self):
         if self.th_fsa_controller is not None:
             self.th_fsa_controller.stop()