Будет ли Python хорошей заменой для командной строки / пакетных сценариев Windows?

У меня есть некоторый опыт работы с Баш, и я не возражаю, но теперь, когда я много занимаюсь разработкой Windows, мне нужно делать базовые вещи / писать базовые скрипты, используя язык командной строки Windows. По какой-то причине этот язык меня действительно раздражает, поэтому я подумывал об изучении Python и его использовании.

Подходит ли Python для таких вещей? Перемещение файлов, создание сценариев для таких вещей, как распаковка резервной копии, восстановление базы данных SQL и т. д.

Да! Я недавно обратился. Раньше я писал тонны файлов bat Windows (плюс с NAnt) для выполнения этих задач, а затем переключился на Python, и я не мог поверить, насколько это было проще и продуктивнее.

Ray 18.10.2008 11:20

См. stackoverflow.com/questions/209470/…. Ответ для Windows такой же, как и для bash.

S.Lott 18.10.2008 15:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
27
2
13 393
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Ответ принят как подходящий

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

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

довольно легко преобразовать python в .exe. В Windows также есть хорошие ссылки на службы COM и Windows.

Martin Beckett 28.03.2010 23:06

Вы знаете о PowerShell?

Powershell (а также cmd и bash) ужасны по сравнению с красотой python. Да я фанатик :)

demented hedgehog 14.06.2014 16:24

Конечно, python - довольно хороший выбор для этих задач (я уверен, что многие вместо этого порекомендуют PowerShell).

Вот хорошее введение с этой точки зрения:

http://www.redhatmagazine.com/2008/02/07/python-for-bash-scripters-a-well-kept-secret/

Обновлено: О проблеме gnud: http://www.portablepython.com/

URL-адрес redhatmagazine.com больше не существует. Archive.org захватил страницу: web.archive.org/web/20080517104907/http://…

WalterGR 19.01.2019 08:04

Python, безусловно, хорошо подходит для этого. Если вы идете по этому пути, вы также можете исследовать SCons, который является самой системой сборки, построенной на Python. Круто то, что сценарии сборки на самом деле сами по себе являются полноценными сценариями Python, поэтому вы можете делать в сценарии сборки все, что в противном случае могли бы делать на Python. По сравнению с этим make выглядит довольно анемичным.

Перечитывая ваш вопрос, я должен отметить, что SCons больше подходит для создания программных проектов, чем для написания сценариев обслуживания системы. Но в любом случае я без колебаний порекомендую вам Python.

Что угодно - хорошая замена пакетной файловой системе в Windows. Perl, Python, Powershell - хороший выбор.

@BKB определенно вызывает серьезную озабоченность. Вот пара ссылок, которые вы захотите проверить, если у вас возникнут проблемы, которые не могут быть решены с помощью стандартной библиотеки:

  • Pywin32 - это пакет для работы с низкоуровневыми API Win32 (расширенные модификации файловой системы, COM-интерфейсы и т. д.)
  • Страница Тима Голдена о Python: он поддерживает пакет-оболочку WMI, основанный на Pywin32, но не забудьте также проверить его страницу "Win32 Как мне сделать", чтобы узнать, как выполнять типичные задачи Windows в Python.

В последнее время я много использую Файлы сценариев Windows. Более мощный, чем пакетные сценарии, и поскольку он использует сценарии Windows, устанавливать нечего.

Python вместе с Pywin32 подойдет для автоматизации Windows. Однако VBScript или JScript, используемые с Winows Scripting Host, работают так же хорошо и не требуют установки дополнительных компонентов.

Как бы я ни любил python, я не думаю, что это хороший выбор для замены базовых пакетных сценариев Windows.

Я не вижу, чтобы кому-то приходилось импортировать модули, такие как sys, os или getopt, для выполнения основных действий, которые вы можете делать с помощью оболочки, например, вызова программы, проверки переменной среды или аргумента.

Кроме того, по моему опыту, большинство системных администраторов понимают goto гораздо проще, чем вызов функции.

Я считаю, что явное использование os.this и sys.that является преимуществом Python. Трудно уловить случайный набор функций оболочки. Библиотеки Python упрощают понимание.

S.Lott 19.10.2008 04:52

В этом я должен согласиться с С. Лоттом. Это не так уж и много лишней работы, а ясность не позволяет загромождать глобальное пространство имен.

Paul D. Eden 09.12.2008 00:14

Я написал приличное количество сценариев как в среде Linux / Unix, так и в среде Windows, в Python, Perl, пакетных файлах, Bash и т. д. Мой совет: если это возможно, установите Cygwin и используйте Bash (из вашего описания это звучит как установка языка сценариев или env не проблема?). Вам будет удобнее с этим, поскольку переход минимален.

Если это не вариант, то вот мой вариант. Пакетные файлы очень сложны и ограничены, но имеют большой смысл для простых задач, таких как «копирование некоторых файлов» или «перезапуск этой службы». Python будет чище, проще в обслуживании и намного мощнее. Однако обратная сторона заключается в том, что вы либо в конечном итоге вызываете внешние приложения из Python с помощью подпроцесса, popen или аналогичного. В противном случае вы в конечном итоге напишете кучу большего количества кода для выполнения сравнительно простых вещей в пакетных файлах, таких как копирование папки, полной файлов. Во многом это зависит от того, что делают ваши скрипты. Например, обработка текста / строк в Python будет намного чище.

Наконец, это, вероятно, не очень привлекательная альтернатива, но вы также можете рассмотреть VBScript в качестве альтернативы. Мне лично не нравится работать с ним как с языком, но если переносимость вызывает какую-либо озабоченность, тогда он выигрывает благодаря тому, что он доступен из коробки в любой копии Windows. Из-за этого я обнаружил, что вместо этого пишу сценарии, которые были громоздкими в виде пакетных файлов на VBScript, поскольку обычно я не могу полагаться на Python, Perl или Bash, доступные в Windows.

«копирование папки с файлами» - может помочь стандартный модуль shutil.

jfs 19.10.2008 19:25

Резюме

Окна: не надо думать, используйте Python. Unix: быстрые скрипты или скрипты для однократного выполнения предназначены для Bash, серьезные скрипты и / или скрипты с длительным сроком службы - для Python.

Большой разговор

В среде Windows Python определенно является лучшим выбором, поскольку cmd - дрянной, а PowerShell еще не освоился. Более того, Python может работать на нескольких платформах, так что это более выгодное вложение. Наконец, Python имеет огромный набор библиотек, так что вы почти никогда не столкнетесь со стеной «бог-я-не могу-этого». Это не относится к cmd и PowerShell.

В среде Linux это немного иначе. Многие однострочники короче, быстрее, эффективнее и часто более читабельны в чистом Bash. Но если вы знаете, что ваш быстрый и грязный скрипт останется на какое-то время или его нужно будет улучшить, выбирайте Python, поскольку его намного проще поддерживать и расширять, и вы сможете выполнять большую часть задач, которые вы можете сделать с помощью инструментов GNU со стандартной библиотекой. И если вы не можете, вы все равно можете вызвать командную строку из скрипта Python.

И, конечно же, вы можете вызвать Python из оболочки, используя параметр -c:

python -c  "for line in open('/etc/fstab') : print line"

Еще немного литературы о Python, используемом для задач системного администрирования:

В качестве продолжения, после некоторых экспериментов я нашел Python наиболее полезным для любой ситуации, связанной с манипуляциями с текстом (yourStringHere.replace (), регулярными выражениями для более сложных вещей) или очень быстрым тестированием какой-либо базовой концепции, что отлично подходит для .

Я считаю, что для таких вещей, как сценарии восстановления базы данных SQL, я обычно просто прибегаю к пакетным файлам, поскольку обычно это либо достаточно короткое, что на самом деле требуется больше кода Python для выполнения соответствующих системных вызовов, либо я могу повторно использовать фрагменты кода от других людей, уменьшая времени написания достаточно, чтобы настроить существующий код в соответствии с моими потребностями.

В качестве дополнения я настоятельно рекомендую IPython как отличную интерактивную оболочку с автозавершением по табуляции и легким доступом к документации.

Другие вопросы по теме