Язык скрипта кроссплатформенной установки

При написании сценария установки я быстро обнаружил, что у меня будут проблемы с кроссплатформенностью, а сценарии bash сложно поддерживать. Я решил поискать более чистое решение, более кроссплатформенное.

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

  • Python — кроссплатформенный, и многие другие программы полагаются на него, поэтому он может уже присутствовать
  • Javascript-nodejs требуется частью моего приложения, но он немного неуклюж для вызовов exec.

Есть ли языки, которые лучше подходят для этого приложения?

Требования:

  • Available on all platforms
    • May be distributed as part of my application if small enough
    • Изменений версий практически нет, поэтому Ruby отсутствует.
    • *nix только сейчас, но со временем будет работать на Windows
  • Maintainable
    • Clear syntax (Perl is out)
    • Модульный (если я обнюхиваю ОС, я могу включить отдельный код для ОС)
  • Возможность загрузки файлов (неудовлетворенные зависимости)
  • Capable of relatively complex scripting tasks
    • Testing for used HTTP ports
    • Чтение и разбор файлов для данных конфигурации
    • Проверка разрешений и изменение каталогов недостаточных привилегий
  • Открытый источник

person beatgammit    schedule 07.08.2011    source источник


Ответы (2)


Python может делать все эти вещи:

  • Available on all platforms (Mac, Linux, Windows, and more)
    • May be distributed as part of my application if small enough (You can make binaries with cx_freeze, if needed)
    • Изменений версий практически нет, поэтому Ruby отсутствует (Python довольно статичен, когда дело доходит до изменений версий)
    • *nix только на данный момент, но в конечном итоге он будет работать в Windows (он предустановлен на Mac и поставляется практически с любым дистрибутивом Linux. Для запуска двоичных файлов интерпретатор не требуется)
  • Maintainable
    • Clear syntax (Perl is out) (Python is very easy to read, but that's up to you to decide)
    • Модульность (если я обнюхиваю ОС, я могу включить отдельный код для ОС) (Модули — это просто файлы в Python)
  • Возможность загрузки файлов (неудовлетворенные зависимости) (Urllib2 позаботится об этом, и он предустановлен)
  • Открытый исходный код (Да)
person Blender    schedule 07.08.2011
comment
Я только начал изучать Python в начале этой недели. Насколько просто вызывать нативные приложения командной строки (grep, sed, cat и т. д.)? - person beatgammit; 07.08.2011
comment
Немного сложно зафиксировать вывод команд (не сложно, но это более одной строки кода), поэтому в Python большинство этих команд так или иначе реализовано. cat будет open('file.txt', 'r').read(). Вам покажется неудобным, что это не так просто, как хотелось бы, вызывать системные команды (это просто import os и os.system('foo'), кстати), но в долгосрочной перспективе с нативными решениями намного проще работать. TL;DR: вы узнаете об этом, когда узнаете больше о Python - person Blender; 07.08.2011
comment
По иронии судьбы, причина, по которой я в первую очередь обратил внимание на Python, заключается в том, что я начал работать в Blender. Спасибо за помощь! - person beatgammit; 07.08.2011
comment
Я тоже ;) Это хороший язык, но я никогда особо не использовал его для Блендера. Может быть, один раз для 3D-плоттера, но это все. Вам понравится то, что он не ломается при переключении типов данных. - person Blender; 07.08.2011
comment
Как Джаваскрипт. Приятно иметь возможность присваивать значение переменной вместо того, чтобы беспокоиться о типах. Я думаю, что Python мне подойдет для этой работы, но я оставлю это открытым на некоторое время на тот случай, если кто-нибудь предложит что-нибудь получше. - person beatgammit; 07.08.2011
comment
Сам никогда не использовал Python для этих целей, поэтому думаю, что должны быть конкуренты. - person Blender; 07.08.2011

Муравей сделает то, что вам нужно. Он не зависит от ОС и позволяет компилировать и устанавливать.

person Joe Zitzelberger    schedule 07.08.2011
comment
Я не слишком знаком с этим. Разрешает ли он относительно сложные сценарии (например, загрузку материалов из Интернета, сканирование HTTP-портов, создание файлов на основе пользовательского ввода)? - person beatgammit; 07.08.2011