Вероятно, мы о разных вещах говорим. Под зависимостями я подразумеваю установленные Вами Python-пакеты, которые Вы импортируете в коде.
Например, что за poster такой здесь?
Подобные внешние зависимости принято держать в requirements.txt для простоты их установки. Если Вы используете виртуальное окружение (virtualenv или venv), можно получить список установленных пакетов так:
while True: vs while 2<3: — Это странно, вероятно, ошибка была в другом. Можно и while 1.
return — В месте вызова функции run возвращаемое значение не ожидается, return — лишнее.
Функция может заканчиваться инструкцией return или не иметь её (при этом вернет None). Следующие функции эквивалентны, все вернут None:
def foo():
return None
def foo():
return
def foo():
pass # ничего не выполняет
В последнем случае инструкция pass ничего не выполняет, просто синтаксис требует тело функции, поэтому тут только неявный return None.
В функции run 3 сценария:
a) условие истинно, тогда вернётся None;
b) условие ложно, нет исключения, тогда вернётся 1;
c) условие ложно, есть исключение, тогда вернётся 0.
Если возвращаемое значение рассматривать как булево, то как-то нелогично, т.к. только b) даст True.
import os
import sys # не стоит сливать импорты
def run(c):
b = c.split()
if b[0] == 'ls':
if len(b) == 1: # if b.__len__() == 1:
b.append('/');
res = os.listdir(b[1])
print(res)
else:
try:
exec(c) # выполнять любой код?
return 1 # зачем возвращаемое значение?
except:
print('Something wrong')
return 0 # зачем возвращаемое значение?
# неявный return None (return 0)
def get_command(ops, VTY):
ops.terminal.write('>>>',vty = VTY) # a, b = ... - лишнее
a, _ = ops.terminal.read(maxLen = 200,timeout = 60,vty=VTY) # _ - тоже переменная
# if a == None:
# a = 'q';
return a or 'q' # a or 'q' <=> если a == None, то будет возвращено 'q'
def ops_condition(ops):
'''Ставим ловушку на ввод команды sh'''
# value, err_str - лишние
ops.cli.subscribe('cli1', '^sh$', enter=True, sync=True, sync_wait=500)
return 0 # зачем?
def ops_execute (ops):
'''Собственно, сам shell'''
key, _ = ops.environment.get('_cli_vty') # value не использовалась
while True: # 2<3 ???
command = get_command(ops, key)
if command == 'q':
break # не нужно ';'
if command: # не нужно писать if command != '':
run(command)
continue
print('\nexit\n')
return 0 # зачем?
Глядя на это превращение "псевдокода" в простыни нечитаемого текста, могу лишь предложить другое название статье:
-> Какая асинхронность должна была бы убить Python
Вероятно, мы о разных вещах говорим. Под зависимостями я подразумеваю установленные Вами Python-пакеты, которые Вы импортируете в коде.
Например, что за
poster
такой здесь?Подобные внешние зависимости принято держать в requirements.txt для простоты их установки. Если Вы используете виртуальное окружение (virtualenv или venv), можно получить список установленных пакетов так:
Читал как детектив!
К сожалению, не нашёл requirements.txt с версиями зависимостей, он есть?
Спасибо, что делитесь опытом. Было бы интересно узнать, какие направления окупились в Вашем случае.
while True: vs while 2<3: — Это странно, вероятно, ошибка была в другом. Можно и
while 1
.return — В месте вызова функции
run
возвращаемое значение не ожидается,return
— лишнее.Функция может заканчиваться инструкцией
return
или не иметь её (при этом вернетNone
). Следующие функции эквивалентны, все вернутNone
:В последнем случае инструкция
pass
ничего не выполняет, просто синтаксис требует тело функции, поэтому тут только неявныйreturn None
.В функции
run
3 сценария:a) условие истинно, тогда вернётся None;
b) условие ложно, нет исключения, тогда вернётся 1;
c) условие ложно, есть исключение, тогда вернётся 0.
Если возвращаемое значение рассматривать как булево, то как-то нелогично, т.к. только b) даст
True
.It is not pythonic way.
Ну хотя бы так:
Лучше обернуть код в класс.