Держать %COMSPEC% живым, скармливая ему команды

Здесь обсуждаются проблемы мироустройства.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

усовершенствовать дерево директорий

Post by Xerox »

Latest post of the previous page:

с другой стороны, делать чисто хостинг CMD проблематично
Pеализуемо, но затратно.
Hадо будет поддерживать все возможности тонкости аутпута и инпута, а это плохо документировано 100%.
Например - консольная (ДОС) игра, там все тонкости будут задейстованы по полной.
С другой стороны, можно дейстивтельно чисто перенаправлять StdIn и StdOut на общую и единственную ФАРовскую консоль, этоо возможно, и по моему это сейчас так и работает, просто ComSpec завершается а не подолжает жить. Технически в одну и ту же консоль могут писать/читать обе проги. Ну в общем фиг знает. Попробовать конечно стоит, но заниматься возможностей нет ни у кого (я не ругаюсь, у самого возможности нет)
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

усовершенствовать дерево директорий

Post by DrKnS »

Xerox wrote: Sun 17 Nov, 2019 00:47У Stream (=StdIn/StdOut/StdErr) (= файл) есть статус, типа открыт/закрыт/существует, его размер, чем и пользуемся
Вроде бы предлагалось держать cmd запущенным вечно? Откуда тогда "закрыт"?
Cmd может находиться в ожидании ввода или быть занят обработкой команды. Если занят - ничего нового обрабатывать не будет. Ввод будет накапливаться в буфере (до какого-то предела). Запустите net view и попрыгайте по клавиатуре.
то читаем пока не получаем EndOfStream, и ждем дальше.
Сколько конкретно ждём? Пользователь возжелал исполнить батник. Вы послали его имя в stdin. Допустим, что он запустился. В процессе исполнения батник выводит произвольные объёмы текста с произвольными задержками. Вы это послушно копируете из stdout куда-то. Как вы определите, что уже аллес, батник закончился, пора показывать панели?
тебе вообще не важно что он у себя делает внутри, закончил или нет, тебе нужна его реакция (output)
Я запустил команду и мне не важно, закончилась она или нет? Оригинально.
просто читаем по мере поступления из StdOut все что там есть и как есть, и пишем это на свою консоль (чтоб юзер видел)
Бывают программы, в общем случае не выводящие ничего.
Тут в общем, так
Речь вообще не об этом. Потоки - это огрызок. Запустите cmd, нажмите там F4, попробуйте пропихнуть полученный диалог через stdout.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

усовершенствовать дерево директорий

Post by Xerox »

DrKnS,
Вроде бы предлагалось держать cmd запущенным вечно? Откуда тогда "закрыт"?
Stream != Process
p1.StdIn.Status != p1.Status
так понятнее? )
Cmd может находиться в ожидании ввода или быть занят обработкой команды. Если занят - ничего нового обрабатывать не будет. Ввод будет накапливаться в буфере (до какого-то предела). Запустите net view и попрыгайте по клавиатуре.
Ну да , и чо? :)
Сколько конкретно ждём? Пользователь возжелал исполнить батник. Вы послали его имя в stdin. Допустим, что он запустился. В процессе исполнения батник выводит произвольные объёмы текста с произвольными задержками. Вы это послушно копируете из stdout куда-то. Как вы определите, что уже аллес, батник закончился, пора показывать панели?
Когда p1.StdIn схавал все что ему дали, переварил, и готов хавать еще (статусы у него есть), вот мы и идем к юзеру (показываем панели) чтобы добыть еще хавчика.
И по контрольным символам, которые не видны, но они есть. Прямо как суслик в ДМБ.
Я запустил команду и мне не важно, закончилась она или нет? Оригинально.
По-честноку - реально не важно.
Тебе важно правильно "лишь" интерпретирповать аутпут.
Этот аутпут чаще всего простой как телевизор Рекорд, но бывает и не столь простой, как в интерактивных дос-играх например.
да как-то там детектится что CMD ничем не занят, но на самом деле не приципиально, если нет активности от него,
Например можно и нарисовать панели обратно, пока он тихо копирует особенно большой файл например.
тут есть другая техническая сложность - интерпретировать все местами замысловатые и незадокументированные возможности Windows консоли
Last edited by Xerox on Sun 17 Nov, 2019 03:18, edited 2 times in total.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

усовершенствовать дерево директорий

Post by Xerox »

Речь вообще не об этом. Потоки - это огрызок. Запустите cmd, нажмите там F4, попробуйте пропихнуть полученный диалог через stdout.
А чего там? обычная отрисовка, ну есть и будут в аутпуте контрольные символы, но дьявол прячется не здесь
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

усовершенствовать дерево директорий

Post by zg »

Xerox wrote: Sun 17 Nov, 2019 03:12тут есть другая техническая сложность - интерпретировать все местами замысловатые и незадокументированные возможности Windows консоли
зачем здесь этот поток сознания?
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

усовершенствовать дерево директорий

Post by Xerox »

zg, Ну люди спрашивали, я отвечал, могу и заткнуться :)
Прастити миня люди добрыя, сами мы не местныя ...
Last edited by Xerox on Sun 17 Nov, 2019 03:35, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

усовершенствовать дерево директорий

Post by zg »

Xerox wrote: Sun 17 Nov, 2019 03:33Ну люди спрашивали, я отвечал, могу и заткнуться :)
люди задавали вполне конкретные вопросы, ожидая получить вполне конкретные ответы. я ничего конкретного в ваших ответах не увидел, возможно не дано. но в процитированном мной предложении смысла ноль, это просто набор слов. зачем он тут? и да, я тоже ожидаю ответа по существу, а не паясничанья.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

усовершенствовать дерево директорий

Post by Xerox »

zg, сударь, a вы бываете заносчивым. Ну да ладно.
в основном я имел ввиду геморрой связанный с передачей и получением контрольных символов из консольного приложения, которыей делают что-то вроде указаний:
"сдвинуться на такую-то координату, нарисовать там такой -то символ"
"ждать ввода от юзера находясь в такой-то координате"
"я закончил аутпут, жду новых указаний"
Ну цветовая разметка ищо.
В обчем с одной стороны ничего сверхестественного, но с другой стороны,
учитывая как все майкорософтовское глючит, недокументировано, кривые API,
то могут быть проблемы с этим оно канешна.
достаточно конкретно?
Конкретнее пока не могу, так как чувствую растущее здесь мною недовольство :cry: которое подавляет мотивацию и аппетит

Зачем я про это рассказываю - ну люди спрашивали, вот и рассказываю.
Меня вот детстве учили учтивости 8)
Last edited by Xerox on Sun 17 Nov, 2019 04:21, edited 4 times in total.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

усовершенствовать дерево директорий

Post by DrKnS »

Xerox wrote: Sun 17 Nov, 2019 03:33Ну люди спрашивали, я отвечал
Люди вам пытаются мягко намекнуть на , из которого традиционно вытекает уже упомянутый 2.2.3.

Всего за несколько постов мы прошли от "вродь не так сложно" до "геморрой" и "могут быть проблемы", и это вы еще ни одной строки кода не написали.
Как уже предложено выше, если не сложно - делайте.

Я же на этом закончу.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Держать %COMSPEC% живым, скармливая ему команды

Post by Xerox »

В общем, подытоживая.
1.) То что я писал актуально для unix-based консолей, там это просто, документирвано, на этом все и построено собственно, - символы по телетайпу.
2.) В винде исторически с одной стороны похоже как (1.), с другой стороны не похоже, с третьей стороны - лес густой. Идут своим путем вобщем.
3.) Но, в винде совершают очередной прорыв, копают с 2018 года в сторону более адекватной консоли, навроде как в пункте (1.)
Так что, через сколько-то лет можно будет оборачивать консоль ФАРом, но это неточно.
Если заморочиться и изьбенуться, то можно реализовать и старыми средствами в винде,
вроде так делают в ConEmu/Cmder/Console2/ConsoleZ
Hо лучше не надо.

Эта серия статей кажется одно из лучшего и современного на тему архитектуры консолей Винды vs. *nix

Windows Command-Line: Inside the Windows Console | Windows Command Line
https://devblogs.microsoft.com/commandl ... kgrounder/
https://devblogs.microsoft.com/commandl ... mand-line/
https://devblogs.microsoft.com/commandl ... s-console/
https://devblogs.microsoft.com/commandl ... le-conpty/
https://devblogs.microsoft.com/commandl ... xt-buffer/

у Rich Turner много интересного и сложного в доступной форме, рекомендую
Last edited by Xerox on Tue 19 Nov, 2019 21:49, edited 2 times in total.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Держать %COMSPEC% живым, скармливая ему команды

Post by Yegor »

Xerox wrote: Tue 19 Nov, 2019 21:48 Так что, через сколько-то лет можно будет оборачивать консоль ФАРом, но это неточно.
Уже можно, и, возможно, последний ConEmu уже даже перешел на новый API (не пользуюсь - не знаю точно).
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
Post Reply

Return to “О тщете всего сущего”