Как я могу использовать JSBeautify из командной строки?

Мне нравится http://jsbeautifier.org/, и я вижу, что у них есть репозиторий github со своим кодом.

В файле readme есть два примера использования этого инструмента через командную строку:

import jsbeautifier
res = jsbeautifier.beautify('your javascript string')
res = jsbeautifier.beautify_file('some_file.js')

а также:

opts = jsbeautifier.default_options()
opts.indent_size = 2
res = jsbeautifier.beautify('some javascript', opts)

Как я могу включить это в сценарий (myjsbeautify.py) так что он может принять либо stdin или аргумент (имя файла) и вывод в stdout? Я также хочу использовать опцию keep array indentation,

Желаемые синтаксисы

cat ugly.js | myjsbeautify.py

или же

myjsbeautify.py ugly.js

4 ответа

Решение

Проверьте этот пост об использовании JSBeautify с Textmate. Там есть несколько хороших инструкций о том, как установить его в вашей системе. В Mac OS X я использовал:

cd /tmp
git clone https://github.com/einars/js-beautify.git
cd js-beautify/python
python setup.py install

Тогда вы можете просто использовать js-beautify /path/to/filename.js чтобы он бежал.

Ваши примеры для использования в качестве библиотеки, а не командной строки. Если вы пытаетесь создать скрипт самостоятельно, который может принимать аргументы и передавать его в JSBeautifier, вам следует взглянуть на модуль argparse. У него есть несколько хороших примеров, чтобы помочь вам. Пример из документов:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
...                     default=sys.stdin)
>>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
...                     default=sys.stdout)
>>> parser.parse_args(['input.txt', 'output.txt'])
Namespace(infile=<_io.TextIOWrapper name='input.txt' encoding='UTF-8'>,
          outfile=<_io.TextIOWrapper name='output.txt' encoding='UTF-8'>)
>>> parser.parse_args([])
Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>,
          outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>)

РЕДАКТИРОВАТЬ: вы также можете использовать getopt, который используется jsbeautifier.py сам. Если вы просто хотите использовать jsbeautifier.py в качестве инструмента командной строки прочитайте usage функция из исходного кода.

В общем, вы можете использовать fileinput модуль, который позволит вам читать либо из стандартного ввода, либо из файлов, названных в позиционных аргументах.

я только что сделал pip install jsbeautify и он добавил js-beautify на мой путь ( /usr/local/bin/js-beautify).

Вы можете использовать его так, как и ожидаете:

      js-beautify --keep-array-indentation file.json > file.pretty.json

И используйте help, чтобы проверить наличие дополнительных аргументов:

      js-beautify --help
Другие вопросы по тегам