Проблема заключается в том, что каждый исполняемый файл в Windows определяется как исполняемый файл с графическим интерфейсом или как исполняемый файл консоли (ну, есть больше подробностей, чем это, но это не имеет значения) во время сборки.Исполняемый файл, на котором выполняется ваш Ruby-скрипт, является исполняемым файлом с графическим интерфейсом (он также использует Tk для создания графического интерфейса пользователя, даже если на скриншоте он очень простой), а исполняемый файл ping - это исполняемый файл консоли.Если исполняемый файл GUI запускает исполняемый файл консоли, консоль автоматически создается для запуска исполняемого файла; Вы не можете изменить это .
Конечно, картина более сложная, чем эта.Это потому, что консольное приложение может фактически работать с графическим интерфейсом (ему просто нужно делать правильные вызовы API), и вы можете использовать целый каталог трюков, чтобы заставить окно консоли оставаться в стороне (например, запускать ping через соответствующий-конфигурированный файл ярлыка) но такие вещи довольно неловкие.Самый простой способ состоит в том, чтобы окно консоли было там все время, если бы сам Ruby был консольным приложением (через с именем суффикса .rb
, а не .rbw
).Да, это на самом деле не избавляет от проблемы, но перестает раздражать перепрошивку.
Если вы использовали ping в качестве цели вашего приложения (т. Е. Чтобы выяснить, работали ли службы), тогда яМожно ли / целесообразно переключиться на написание проверочного кода непосредственно в Ruby, подключившись к сервису, а не пропингуя его, так как ping просто измеряет, живо ли целевое ядро ОС, а не исполняемый файл сервиса.Это отличительная черта, но я видел, что машины попадали в состояние, когда исполняемые файлы не выполнялись, но машина все еще отвечала на эхо-запросы;это было очень странно и может полностью сломать ваши умственные абстракции, но может случиться.Но так как вы используете только ping в качестве примера, я думаю, вы можете просто сосредоточиться на (довольно проблематичной) обработке консоли.Тем не менее, если вы можете сделать это без запуска подпроцесса, тогда определенно выберите этот метод (в Windows; если бы вы работали в любом виде Unix, у вас вообще не было бы этой проблемы).