Передача довольно больших аргументов в скрипт ruby, проблемы? - PullRequest
3 голосов
/ 13 ноября 2009
ruby somescript.rb somehugelonglistoftextforprocessing

это плохая идея? лучше мне создать отдельный плоский файл, содержащий некоторый большой список текста для обработки, и позволить somescript.rb его прочитать?

имеет ли значение, если аргумент сценария представляет собой очень очень длинный текст (1КБ ~ 300КБ)? Какие проблемы могут возникнуть, если таковые имеются.

1 Ответ

6 голосов
/ 13 ноября 2009

Пока пределы вашего кода обработки командной строки (например, bash или ruby непосредственно) не превышены, у вас не должно быть никаких технических проблем с этим.

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

Есть несколько способов, которыми я видел эту обработку, которые вы можете рассмотреть (этот список ни в коем случае не является исчерпывающим):

  • Измените код так, чтобы, если нет аргументов, считывали информацию из стандартного ввода - это позволит вам сделать либо
    ruby somescript.rb myData
    или
    ruby somescript.rb <myFile.txt.

  • Используйте специальный символ для обозначения ввода файла (я видел @, использованный таким образом). Таким образом,
    ruby somescript.rb myData
    будет использовать данные, предоставленные в командной строке, в то время как
    ruby somescript.rb @myFile.txt
    получит данные из файла.

Мой совет - использовать файловый метод для данных такого размера и разрешить использование аргумента, если он указан. Это охватывает оба возможных сценария:

  • Множество данных, поместите их в файл, чтобы вам не приходилось перепечатывать их каждый раз, когда вы хотите выполнить команду.
  • Не так много данных, разрешите их передачу в качестве аргумента, чтобы вам не приходилось создавать файл для чего-то, что было бы проще ввести в командной строке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...