Сценарии Python отличаются от сценариев Perl и PHP, поскольку операторы здесь разделяются пробелами, а не точками с запятой или фигурными скобками. Символы табуляции также важны. Наш первый сценарий Python, подобно нашим более ранним примерам на других языках, ищет файл пароля и печатает каждую строку, содержащую подходящий текст:
#!/usr/bin/python import re. sys pattern = "(?i)" + sys.argv[l] file = open("/etc/passwd") for line in file: if re.search(pattern, line): print linePython имеет пространства имен (как и Perl) для функций групп, и поэтому многим функциям в этом сценарии предшествуют последовательности символов sys. и re.. Это позволяет несколько лучше, модульно, преподносить части кода. Выражение " (?i)" в третьей строке делает соответствие нечувствительным к регистру, подобно /i в Perl.
Следующий шаг цикла, в котором строки ввода разбиваются на поля, включает прямое продолжение предыдущего:
Python имеет эквивалент функции Perl getpwent, позволяющий ограничить поиск полями, содержащими имена. Сохраните следующий сценарий как fi nduser. ру:
#!/usr/bin/python import re, sys, pwd pattern = "(?i)" + sys.argv[l] for line in pwd.getpwalK ): if re.search(pattern, 1 ine.pw_gecos): print lineТеперь посмотрим, как это работает: admin@serverl:$ ./finduser.ру alf
Cadedarc'. 'x'. 501, 501. 'Alfredo de Dare', '/home/adedarc', '/bin/bash')
В данном сценарии напечатанная нами строка была скорее списком Python, чем последовательностью символов, и это было хорошо видно. Чтобы напечатать строку в ее оригинальном формате, используйте такой код:
Последняя строка должна превратить каждое поле в последовательность символов (pw_uid и pw_gid являются целыми числами) прежде, чем присоединить их к длинной, разделенной двоеточиями, последовательности символов. В то время как Perl и РНР позволяют вам считать переменную последовательностью символов или числом, Python строже.
Последний шаг — ограничение поиска учетными записями с uid > 500: