Задать вопрос
  • Какой аналог Perl модуля (URI::Escape::JavaScript) в Python3?

    @pcdesign Автор вопроса
    На коленке нашел такое решение:

    import json
    import re
    
    query = "яблоко"
    esc = json.dumps(query).upper()
    p = re.compile(r"\\U", re.I)
    esc = p.sub('%u', esc)
    print(esc)


    Результат:
    %u044F%u0431%u043B%u043E%u043A%u043E

    Но как-то мне все это не нравится.
    Ответ написан
    Комментировать
  • Как найти похожие слова в списке?

    @pcdesign Автор вопроса
    Ну как-то вот так получилось:

    import difflib
    
    
    def similar(arr):
        s = difflib.SequenceMatcher()
        full = []
        for i in arr:
            s.set_seq2(i)
            for n in (arr):
                if n == i:
                    continue
                s.set_seq1(n)
                full.append((s.ratio(), n))
                full.sort(reverse=True)
    
        print("### Отладка ### Сколько каждое слово набрало очков похожести")
        for score, i in full:
            print(i + str(score))
    
        return full[0]
    
    arr = ['голубец', 'конь', 'голубцы', 'лист']
    print("Итоговый результат:" + similar(arr)[1])
    
    arr = ['стол', 'день', 'свет', 'клинок', 'светильник']
    print("Итоговый результат:" + similar(arr)[1])
    
    arr = ['восток', 'дань', 'исток', 'жир', 'голубь', 'да']
    print("Итоговый результат:" + similar(arr)[1])


    Результат работы:
    ### Отладка ### Сколько каждое слово набрало очков похожести
    голубцы0.8571428571428571
    голубец0.8571428571428571
    лист0.18181818181818182
    лист0.18181818181818182
    конь0.18181818181818182
    конь0.18181818181818182
    голубцы0.18181818181818182
    голубцы0.18181818181818182
    голубец0.18181818181818182
    голубец0.18181818181818182
    лист0.0
    конь0.0
    Итоговый результат:голубцы 
    
    ### Отладка ### Сколько каждое слово набрало очков похожести
    светильник0.5714285714285714
    свет0.5714285714285714
    стол0.5
    свет0.5
    стол0.42857142857142855
    светильник0.42857142857142855
    светильник0.375
    светильник0.2857142857142857
    день0.2857142857142857
    свет0.25
    день0.25
    стол0.2
    клинок0.2
    клинок0.2
    день0.2
    клинок0.125
    стол0.0
    свет0.0
    клинок0.0
    день0.0
    Итоговый результат:светильник
    
    ### Отладка ### Сколько каждое слово набрало очков похожести
    исток0.7272727272727273
    восток0.7272727272727273
    дань0.6666666666666666
    да0.6666666666666666
    исток0.25
    жир0.25
    дань0.2
    голубь0.2
    исток0.18181818181818182
    голубь0.18181818181818182
    голубь0.16666666666666666
    восток0.16666666666666666
    исток0.0
    исток0.0
    жир0.0
    жир0.0
    жир0.0
    жир0.0
    дань0.0
    дань0.0
    дань0.0
    да0.0
    да0.0
    да0.0
    да0.0
    голубь0.0
    голубь0.0
    восток0.0
    восток0.0
    восток0.0
    Итоговый результат:исток
    Ответ написан
    Комментировать
  • Как правильно составить sql-запрос с параметрами?

    @pcdesign
    Я попробовал у себя
    date = '31/01/2015'
    date_format = '%d/%m/%Y'
    g.cur.execute("""SELECT * FROM `per` WHERE DATE_FORMAT(`date_sf`, %s) = %s""",
                        (date_format, date))
    rows = g.cur.fetchall()
    print(rows)

    Так работает.
    Ну и еще применительно к алхимии.
    Вот так работает:
    date = '01/01/2015'                                                           
    date_format = '%d/%m/%Y'                                                      
    sql = """SELECT * FROM `users` WHERE DATE_FORMAT(`date`, '%s') = '%s' """ % (date_format, date)                                                       
    rows = db.session.execute(sql)


    И есть вот такой еще путь.
    Имхо, самый правильный:
    from sqlalchemy import text
    rows = db.session.execute(text("SELECT * FROM `users` WHERE  DATE_FORMAT(`date`, :df) = :date "), 
    {"df": '%d/%m/%Y', "date": '01/01/2015'})
    Ответ написан
    2 комментария
  • Вопрос-минутка. Как убить процесс, запущенный с опр. папки?

    @pcdesign
    Наберите
    ps axuf
    Дальше выберите процесс из нужной папки у убейти его
    kill pid
    Ответ написан
    2 комментария
  • Как понять, почему сервер становится недоступен?

    @pcdesign
    Была подобная ситуация с сервером.
    Помогло обновление ядра.
    Ответ написан
    1 комментарий
  • Как настроить перенаправление звонков в Asterisk?

    @pcdesign
    - Перевод звонка вручную можно делать набрав решетка, решетка ##тел2. Ответил тел1, дальше перевел звонок на тел2.
    Смотрите раздел Admin -> Feature Code
    Включите, если отключено.
    И там другие есть варианты переводов звонков.

    - Автоматический перевод звонка - в разделе followme.

    - Рингтоны настраиваются в followme. Пункт Play Music On Hold.
    Ответ написан
    Комментировать
  • Какую выбрать книгу для изучения Perl + MySQL?

    @pcdesign
    На счет пошаговости и онлайн - не знаю.

    А книжку вот эту рекомендую:
    www.ozon.ru/context/detail/id/4289407

    В сжатой форме все необходимые знания даны по Perl и MySQL.
    Ответ написан
    Комментировать
  • Почему не запускается gunicorn?

    @pcdesign Автор вопроса
    Проблема решается добавлением 2х строчек в файл wsgi.py

    #####################
    from __future__ import unicode_literals

    import os
    import sys
    PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
    sys.path.insert(0, os.path.abspath(os.path.join(PROJECT_ROOT, "..")))

    settings_module = "%s.settings" % PROJECT_ROOT.split(os.sep)[-1]
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", settings_module)

    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
    #####################

    Уж не знаю на сколько это корректно, но работает.
    Ответ написан
    Комментировать
  • Как определить подключние AGI скрипта к asterisk?

    @pcdesign
    вот как понят, что он отработал, к примеру с ошибками или нет

    Включите внутри вашего скрипта ведение логов.
    На коленке, например так:

    open my $file, '>  /tmp/my-agi.log';
    print $file "Скрипт запустился";


    Ну и так далее, в начале в конце, в середине скрипта.
    Записывайте туда значения переменных, данные которые вы получаете от AGI и что с ними там делаете.
    Все пишите в текстовичок.
    Будет понятно как он отрабатывает.

    Либо используете готовый модуль для ведения логов, типа Log::Log4perl.
    С ним еще удобнее.
    Вот кусок из моего кода:

    use Data::Dumper;
    use Log::Log4perl qw(:easy);
    Log::Log4perl->easy_init( { level => $ON, file => ">>/var/lib/asterisk/agi-bin/test.log" } );
    
    DEBUG "START";
    
    my $AGI   = new Asterisk::AGI;
    my %input = $AGI->ReadParse();
    
    DEBUG "cid" . Dumper($AGI);


    Когда вы убедитесь, что скрипт отрабатывает как нужно, то просто отключаем ведение логов level => $OFF.
    Ответ написан
  • Как отправить файл в теле POST запроса в Perl?

    @pcdesign
    Если я правильно понял вопрос, то вот так:

    my $req = POST  $self->{url},
                       Content_Type => 'form-data',
                       Content      => 
                       [
                         $params->{file} => [ /tmp/file.name ], 
                       ];
    Ответ написан
    Комментировать
  • Asterisk: 2 аккаунта у одного sip оператора для исходящих. Как обойти блокировку по ip?

    @pcdesign
    Если я до конца понял вопрос.
    То поднимите 2 астериска на разных IP.
    Один астериск будет обслуживать аккаунт1.
    А второй астериск аккаунт2.

    На разные порты достаточно повесить и прописать разные исходящие IP.
    Ответ написан
    3 комментария
  • Python3.х. Как в windows получить список: "название сетевого адаптера" - "ip адрес"?

    @pcdesign Автор вопроса
    import wmi
    
    wmi_obj = wmi.WMI()
    wmi_sql = "select IPAddress, Description from Win32_NetworkAdapterConfiguration"
    wmi_out = wmi_obj.query( wmi_sql )
    
    for dev in wmi_out:
        try:
            dev.IPAddress[0]
        except TypeError:
            print(dev.Description, "- None")
        else:
            print( dev.Description, "IPv4Address:", dev.IPAddress[0])


    Результат работы:

    WAN Miniport (SSTP) - None
    WAN Miniport (IKEv2) - None
    WAN Miniport (L2TP) - None
    WAN Miniport (PPTP) - None
    WAN Miniport (PPPOE) - None
    WAN Miniport (IPv6) - None
    WAN Miniport (Network Monitor) - None
    Устройства Bluetooth (личной сети) - None
    WAN Miniport (IP) - None
    RAS Async Adapter - None
    Адаптер Microsoft ISATAP - None
    Realtek PCIe FE Family Controller - None
    Адаптер Microsoft ISATAP - None
    Intel(R) Centrino(R) Wireless-N 2230 IPv4Address: 192.168.1.34
    TAP-Windows Adapter V9 - None
    Microsoft Virtual WiFi Miniport Adapter - None
    Адаптер Microsoft ISATAP - None
    Microsoft Virtual WiFi Miniport Adapter - None
    Ответ написан
    Комментировать
  • Почему после рестарта mysql перестает работать flask?

    @pcdesign Автор вопроса
    Решил это дело вот так:
    from flask import Flask, g 
    import pymysql
    app = Flask(__name__)
    
    
    @app.before_request
    def before_request():
        g.conn = pymysql.connect(host='localhost',
                                 user='pm',
                                 passwd='wccme',
                                 db='pcm',
                                 charset='utf8')
    
        g.cur = g.conn.cursor(pymysql.cursors.DictCursor)
    
    
    @app.teardown_request
    def close_mysql(exception=None):
        g.conn.close()
    
    
    @app.route('/')
    def hello_world():
        try:
            g.cur.execute("select * from news where id=209")
        except Exception as e:
            print(e)
    
        print(g.cur.fetchall())
        return "aaa"
    
    
    if __name__ == '__main__':
        app.run()


    Засунул коннект к базе в before_request, а закрытие соединений в teardown_request.
    После этого можно как угодно рестартить mysql.
    Ответ написан
  • Perl+Cron - почему не сохраняется файл?

    @pcdesign
    Вот несколько вариантов как можно это победить:

    1) Можно вот эти строки добавить в скрипт, где-нибудь сверху.

    BEGIN {
        use Cwd 'chdir';    # Запуск скрипта из крона
        use File::Basename;
        chdir dirname $0;    # Меняем путь
    }


    2) Либо сделать сначала в кроне:
    cd *путь к директории где лежит файл*;  /usr/bin/perl *путь к файлу*


    3) В вашем скрипте указать полный путь к файлу.
    Ответ написан
    1 комментарий
  • Как сохранить bash массив в perl массив?

    @pcdesign
    Если я правильно понял вопрос, то предложил бы вместо system использовать кавычки `$cmd`.

    perl -e '@arr=`ps ax`; print for ( @arr); '

    А лучше использовать вот этот модуль, для bash комманд.

    perl -e 'use IPC::Open3; my $pid = open3 ( *HIS_IN, *HIS_OUT, *HIS_ERR, "ls", "-thall"); my @outlines = <HIS_OUT>; print "STDOUT:\n", @outlines, "\n";'


    Его рекомендует использовать перл-критик, а на system он страшно ругается ))
    Ответ написан
    Комментировать
  • Доступ к серверу извне?

    @pcdesign
    — IP должен быть белым. А то можеть этот IP, который вы определили — используется еще у целого квартала юзеров.

    — Если используете роутер, то нужно открыть соответствующий порт и направить его на ваш nginx с ubuntu.

    — Ну и файволле в убунту открыть порт, если файрфолл включен.
    Ответ написан
    3 комментария
  • Fail2ban — Received MemoryError()

    @pcdesign Автор вопроса
    Проблема была в selinux.
    Вечно я про него забываю.
    Ответ написан
    Комментировать
  • Проблемы с DNS?

    @pcdesign
    Например, провайдер «Акадо» — запрещает юзать любые DNS кроме своих собственных, в т.ч. и 8.8.8.8

    Возможно вы тоже «счастливый обладатель» такого же или похожего провайдера :)

    www.linux.org.ru/forum/general/5984250
    Ответ написан
    1 комментарий
  • Проблема с настройкой OpenVPN сервера

    @pcdesign
    Попробуйте так:

    iptables -t nat -I POSTROUTING -s 192.168.50.0/24 -j SNAT --to-source XX.XX.XX.XX

    XX.XX.XX.XX — ваш белый айпи сервера.

    И добавьте строку:
    log-append /var/log/openvpn.log

    Чтобы на сервере видеть подробные логи.

    P.S. Ну еще может AppArmor голову морочит.

    P.S2. Ну и опенвпн не забываем запускать в винде от админа.
    Ответ написан