Pull to refresh
0
0
Виктор @victor_usachev

User

Send message

Глядя на это превращение "псевдокода" в простыни нечитаемого текста, могу лишь предложить другое название статье:


Какая асинхронность должна была бы быть в Python

-> Какая асинхронность должна была бы убить Python

Вероятно, мы о разных вещах говорим. Под зависимостями я подразумеваю установленные Вами Python-пакеты, которые Вы импортируете в коде.
Например, что за poster такой здесь?


Подобные внешние зависимости принято держать в requirements.txt для простоты их установки. Если Вы используете виртуальное окружение (virtualenv или venv), можно получить список установленных пакетов так:


pip freeze > requirements.txt

Читал как детектив!
К сожалению, не нашёл requirements.txt с версиями зависимостей, он есть?

Спасибо, что делитесь опытом. Было бы интересно узнать, какие направления окупились в Вашем случае.

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.

It is not pythonic way.


Ну хотя бы так:


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  # зачем?

Лучше обернуть код в класс.

Information

Rating
Does not participate
Location
Владивосток, Приморский край, Россия
Date of birth
Registered
Activity