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

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

26
задан Peter Mortensen 28 March 2010 в 18:46
поделиться

12 ответов

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

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

20
ответ дан Peter Mortensen 28 November 2019 в 06:53
поделиться

Сводка

Windows : никакая потребность думать, используйте Python. Unix: быстрые или run-it-once сценарии для Bash, серьезные и/или длинные пожизненные сценарии для Python.

хвастовство

В среде Windows, Python является определенно лучшим выбором с тех пор , cmd является дрянным, и PowerShell еще действительно не обосновался. То, что является большим количеством Python, может работать на нескольких платформах, таким образом, это - лучшие инвестиции. Наконец, Python имеет огромный набор библиотеки, таким образом, Вы никогда не будете почти врезаться в "god-I-can't-do-that" стену. Это не верно для cmd и PowerShell.

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

И конечно можно назвать Python от оболочки с помощью-c опцию:

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

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

12
ответ дан Peter Mortensen 28 November 2019 в 06:53
поделиться

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

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

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

РЕДАКТИРОВАНИЕ: О беспокойстве gnud: http://www.portablepython.com/

8
ответ дан Vinko Vrsalovic 28 November 2019 в 06:53
поделиться

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

  • Pywin32 является пакетом для работы с низкоуровневыми win32 API (усовершенствованные модификации файловой системы, COM-интерфейсы, и т.д.)
  • страница Python Tim Golden: он поддерживает пакет обертки WMI, который создает прочь из Pywin32, но убеждаться также проверить его "Win32, Как Делают меня" страница для получения дополнительной информации о том, как выполнить типичные задачи Windows в Python.
5
ответ дан technomalogical 28 November 2019 в 06:53
поделиться

Вы знаете PowerShell?

5
ответ дан bdukes 28 November 2019 в 06:53
поделиться

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

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

2
ответ дан Greg Hewgill 28 November 2019 в 06:53
поделиться

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

4
ответ дан Nick 28 November 2019 в 06:53
поделиться

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

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

Как приложение я настоятельно рекомендовал бы IPython как большая интерактивная оболочка вместе с заполнением клавишей Tab и легким docstring доступом.

1
ответ дан Lawrence Johnston 28 November 2019 в 06:53
поделиться

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

1
ответ дан Bullines 28 November 2019 в 06:53
поделиться

Я использовал много из Windows Script Files в последнее время. Более мощный, чем сценарии пакетной обработки, и так как это использует сценарии Windows, нет ничего для установки.

0
ответ дан Patrick Cuff 28 November 2019 в 06:53
поделиться

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

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

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

0
ответ дан Jay 28 November 2019 в 06:53
поделиться

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

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

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

-2
ответ дан Kozyarchuk 28 November 2019 в 06:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: