Будет ли Python хорошей заменой командным / пакетным скриптам Windows? - PullRequest
26 голосов
/ 18 октября 2008

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

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

Ответы [ 12 ]

20 голосов
/ 18 октября 2008

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

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

12 голосов
/ 19 октября 2008

Резюме

Windows : не нужно думать, используйте 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, используемой для задач системного администрирования:

8 голосов
/ 18 октября 2008

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

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

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

РЕДАКТИРОВАТЬ: О озабоченности Гнуд: http://www.portablepython.com/

5 голосов
/ 18 октября 2008

@ БКБ определенно имеет действительное беспокойство. Вот пара ссылок, которые вы хотите проверить, сталкиваетесь ли вы с какими-либо проблемами, которые невозможно решить с помощью стандартной библиотеки:

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

Вам известно о PowerShell ?

4 голосов
/ 18 октября 2008

Все это хорошая замена для файловой системы Batch в Windows. Perl, Python, Powershell - все это хороший выбор.

2 голосов
/ 18 октября 2008

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

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

1 голос
/ 30 января 2009

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

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

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

1 голос
/ 18 октября 2008

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

0 голосов
/ 18 октября 2008

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

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

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

...