Прежде чем выгрузить любую критику, сначала позвольте мне поздравить вас с работой вашей первой программы на Python. Переход с одного языка на другой может быть непростой задачей, постоянно возиться с проблемами синтаксиса и охотиться через незнакомые библиотеки.
Наиболее цитируемое руководство по стилю: PEP-8 , но это только руководство, и, по крайней мере, некоторая его часть игнорируется ... нет, я имею в виду, что оно не применимо к какой-то конкретной ситуации со всеми должное уважение к авторам и авторам руководства: -).
Я не могу сравнить его с PHP, но по сравнению с другими приложениями Python довольно ясно, что вы следуете стилевым соглашениям других языков. Я не всегда соглашался со многими вещами, которые другие разработчики говорили, что вы должны делать, но со временем я понял, почему использование соглашений помогает понять, что делает приложение, и поможет другим разработчикам помочь вам.
Поднимайте исключения, а не строки.
raise 'Server or group ' + sectionname + ' not found in ' + configfile
становится
raise RuntimeError('Server or group ' + sectionname + ' not found in ' + configfile)
Не ставьте пробел перед ':' в конце 'if' или 'for', и не помещайте несколько операторов в одну строку, и будьте последовательны в отношении размещения пробелов вокруг операторов. Используйте имена переменных для объектов и придерживайтесь
i
и
j
для переменных индекса цикла (как наши предки FORTRAN):
for i in grouplist : servers+=getServers(i)
становится:
for section in grouplist:
servers += getServers(section)
Контейнеры могут быть проверены на содержание без определения их длины:
while len(threadlist) > 0 :
становится
while threadlist:
и
if command.strip() == "" :
становится
if command.strip():
Разделение кортежа обычно не ставится в круглых скобках с левой стороны оператора, а логика команды немного запутана. Если аргументов нет, то "" .join (...) будет пустой строкой:
(options,args) = parser.parse_args()
if options.verbose : print "floep 0.1"
command = " ".join(args)
if command.strip() == "" : parser.error('no command given')
становится
options, args = parser.parse_args()
if options.verbose:
print "floep 0.1"
if not args:
parser.error('no command given')
command = " ".join(args)
В цикле Python for есть необычное предложение 'else', которое выполняется, если цикл проходит через все элементы без 'break':
for server in threadlist :
foundOne = False
if not server.isAlive() :
...snip...
foundOne = True
if not foundOne :
time.sleep(0.010)
становится * * тысяча пятьдесят-одна
for server in threadlist:
if not server.isAlive():
...snip...
break
else:
time.sleep(0.010)
Получение списка строк и последующее их объединение немного затянуто:
result = proc.readlines()
strresult = ''
for line in result : strresult+=line
self.result = strresult
становится
self.result = proc.read()
Вы хорошо используете библиотеку, проверьте модуль подпроцесса, он немного обновлен.
С вашими типами данных все в порядке.
И вы получите много других ответов: -)