Если внешнее приложение генерирует текстовый вывод, то пока запуск программы и чтение выводимой ею информации не будут следовать в указанном здесь порядке, ваш сценарий может работать неправильно: set pnognam Даже если с текстом ничего не делается, этот сценарий читает информацию из приложения. Если не написать сценарий именно таким образом, то ваш сценарий или приложение могут «зависнуть» в бесконечном ожидании друг друга.
Объясняется это так: запущенное вами консольное приложение может записывать текст в поток стандартного вывода, поток стандартной ошибки или в оба этих потока. Когда оно это делает, Windows собирает весь записанный текст и хранит его у себя, пока ваш сценарий считывает его, используя методы StdOut и StdEnn объектов TextStneam. Это называется буферизацией. Но все это работает только до определенного момента — если аккумулировано более 4096 символов, Windows останавливает приложение до тех пор, пока вашим сценарием не будет считан весь накопленный текст. Если сценарий вообще не собирается считывать текст, приложение никогда не получит разрешения на возобновление выполнения и на завершение своей задачи. Но на этом трудности не заканчиваются. Когда объект TextStneam используется для чтения данных из файла, сохраненного на диске, Windows заранее знает, сколько информации хранится в файле. Но в данном случае чтение происходит из выполняющейся программы, и Windows не может знать, сколько текста появится, если он вообще будет. Поэтому при все еще работающей программе, с помощью свойства AtEndOfStneam выполняется весьма непростая задача. Все это происходит следующим образом: Если приложение все еще выполняется и записало текст, которые еще не был считан, AtEndOfStneam возвращает False, позволяя его считать.