Я запускаю конкурс по программированию Puzzles & Code Golf под названием Good Versus Evil. Когда я написал вызов, я не ожидал представления 50+, которое у меня сейчас есть. Теперь я должен как-то отправить команду Windows, которая немного больше 58 000 символов, и я ожидаю, что число будет расти. Возможно ли это?
Код, который я использую для выполнения других представлений, выглядит следующим образом (в Java):
proc = Runtime.getRuntime().exec(command + " " + history);
command
- это что-то вроде python angel.py
или cscript//nologo PiHart.vbs
history
- это аргумент, который растет больше, чем Windows может обрабатыватьКогда команда плюс история увеличивается более чем на 32 000 символов, я получаю исключение IOException:
Ошибка CreateProcess = 206, имя файла или расширение слишком длинны
Имейте в виду, что я не могу просто изменить правила. Сообщество PPCG не переносит изменения правил, которые недействительны для существующих представлений. Временное правило, которое у меня есть, просто делит материалы на управляемые контейнеры, а затем запускает конкурс партиями. Это не нарушает никаких представлений, но это может повредить представлениям, которые ожидали более крупную игровую группу.
Должен признаться, я подробно не рассматривал вопрос cgse, но будет ли слишком сложно работать с участниками, чтобы просто изменить схему ввода из аргументов командной строки в stdin?
Поскольку максимальная длина строки в командной строке 32K эффективно не меняется.
EDIT: Хорошо, немного изучая ответы, они в основном достаточно тривиальны (и на языках высокого уровня), так что изменение формата ввода, вероятно, допустимо. Если вы сомневаетесь, это может быть сделано вами, чтобы не беспокоить первоначальных исполнителей (есть люди, которые всплывают, чтобы опубликовать ответ и никогда больше не реагируют на комментарии, которые, вероятно, тоже не изменят свой код).
Другой вариант: сколько из этих ответов зависит от Windows? Я думаю, что Linux ограничивает длину строки командной строки. Я довольно одинок, как гольфист PowerShell на этом сайте, и большинство людей склонны писать на языках, которые переносятся и на другие ОС (они также собирают большинство опросов). Вы можете попробовать запустить большинство представлений в Linux и исправить конкретные для Windows типы для другого формата ввода. Еще много работы с вашей стороны, но, возможно, проще оправдать, чем заставить других работать больше.
Вы можете зарегистрировать ошибку в Microsoft, и они могут исправить ее для вас в один прекрасный день, предполагая, что они не указывают, что это может нарушить обратную совместимость, что является хорошим оправданием, чтобы не исправить ошибку.
Или вы могли бы написать команды в пакетный файл и запустить командный файл;)
UNICODE_STRING