Как запустить батник из tcl-файла внутри Quartus?

Я хотел бы запустить из Quartus tcl-файл, который запускает пакетный файл, пока пакетный файл читает пользовательский ввод.

Первая проблема заключается в том, что я вообще не вижу командную строку, в которой я могу видеть пользовательский ввод.

tcl-файл запускает файл .bat следующим образом:

exec cmd \/c D:/test/run.bat

Как мне это сделать?


person Norick    schedule 03.09.2020    source источник


Ответы (1)


Я предполагаю, что вы не запускаете это из приложения неконсольного режима. Если бы вы были, консоль появлялась бы автоматически. Есть много вопросов об этом и о том, как это предотвратить, но у вас, похоже, есть обратный вопрос.

По умолчанию Tcl запускает подпроцессы, чтобы они были связаны с процессом Tcl, чтобы позволить ему предоставлять входной поток и читать выходной поток и поток ошибок. Это самый распространенный случай. Однако в вашем случае вы хотите, чтобы они были направлены на текущие потоки ввода/вывода, чтобы пользователь мог их видеть. Это не так уж сложно, но требует немного больше кода:

# You need to use [file nativename] with cmd
# The double quotes are for highlighting purposes here on Stack Overflow only
exec cmd /c [file nativename "D:/test/run.bat"] <@stdin >@stdout 2>@stderr

Критический бит (если мой диагноз верен) — это <@stdin >@stdout 2>@stderr, который соединяет каналы.

Также возможно, что file nativename на самом деле делает важное дело. Имена файлов, передаваемые не-Tcl-процессам в Windows, обычно должны быть представлены в родной форме (в основном, с \ вместо /). И вам не нужно ставить \ перед /.

person Donal Fellows    schedule 04.09.2020
comment
получите это сообщение об ошибке с вашим примером: Ошибка (245021): Не удалось запустить сценарий Tcl D:/test/run.tcl. Ошибка: канал stdin не открыт для чтения. - person Norick; 04.09.2020
comment
Ах, это признак того, что в среде исполнения дела обстоят чертовски плохо. Тогда лучшим советом будет изменить этот пакетный сценарий так, чтобы он никогда не считывал данные от пользователя в интерактивном режиме, так как это вряд ли когда-нибудь сработает, когда вы запустите его в этом месте. - person Donal Fellows; 06.09.2020
comment
Спасибо за ответ. Я изменю пакетный файл, чтобы не было ввода пользователя - person Norick; 08.09.2020