Python & MySql
а почему вам это не нравится? читал, можно еще чрез cgi запустить, но не вижу, чем это лучше. еще читал, можно сделать что-то типа "интегрировать пайтон в пхп-скрипт", или что-то такое. ускорение происходит, т.к. интерпретатор пайтона активируется один раз при старте сервера, а не каждый раз при обращении к странице. но отладка будет геморройной: после каждой мелочи нужно перезапускать сервер.
у меня сейчас новый вопрос возник. вчера попробовал отправить из пайтона имэйл. получилось, но я должен в коде указать имя/пароль в открытом виде, что мне не нравится. понимаю, что это как поднять себя за волосы, но что можно придумать, не выкладывая пароль в открытом виде и не запрашивая его в интерактиве?
а почему вам это не нравится?
Дырка в безопасности.
читал, можно еще чрез cgi запустить, но не вижу, чем это лучше.
По скорости не сильно лучше. Просто контроль за тем, что запускается будет получше.
я не специалист в дырках в безопасности, поэтому не понимаю, кто и как может эту дырку использовать. если бы вы могли "на пальцах" объяснить. только без "если кто-то получит root" или если у меня появятся злые умыслы. имеется ввиду злое замыслил the man in the middle attack.
снова чайниковый вопрос. начитался на тему - уже "кушать не могу", но с какой стороны коней запрягать, так и не понял.
имею класс, которому переписал __str__() (так понимаю, это - аналог toString() в других языках), в надежде печатать эту строчку потом просто, "печатая объект класса"
class ClassA (object) ... def __str__(self): return self._somestring ...
пытаюсь использовать:
obj = ClassA() s = obj.__str__() print s # ok print obj # exception: 'ascii' codec can't encode character u'\xfc' in position 36: ordinal not in range(128)
кто расскажет, почему присвоение того, что возвращает __str__ напрямую, позволяет себя напечатать, а "то же самое" оказывается не совсем то же самое?
ну вот снова: стоило людям пожаловаться, как нашел простое объяснение:
https://stackoverflow.com/questions/1307014/python-str-ver...
... но все равно ничего не понимаю : (
почему print всегда использует acsii codec? как сделать так, чтобы он использовал другой?
но что можно придумать, не выкладывая пароль в открытом виде
Любой вид симметричного кодирования начиная от xor. Либо пользовать сервер не требующий пароля на посылку данных либо создать адрес для которого пароль не играет роли.
кто и как может эту дырку использовать.
Вы, как клиент провайдера. На своём собственном апаче можно и не запрещать пхп запускать процессы. Но если вы провайдер...
1. Вы не даёте клиенту SSH доступ. Благодаря процессам их php он его "получает".
2. Даже если у вашего клиента есть доступ по SSH. По ssh он логинится как vasja, с кучей ограничений и как бы вообще не в своем заchroot-енном окружении. А вот процессы запущенные апачевским php модулем будут бегать под апачевским пользователем. Вряд ли провайдер запускает апач под каждого клиента.
ssh можно получить, отправив им скэн своего паспорта. им просто нужно знать, тот ли я на самом деле, за кого себя выдаю (до сих пор я мог назваться кем угодно, и даже заграницей находиться).
при случае распечатаю, под каким пользователем выполняется пайтон, это легко опросить. думаю, это окажусь я : )
а с "принт" не можете объяснить? я так понимаю, что если класс не переписал __str__(), то print obj напечатает что-то типа object of class blablabla 0x0000000000012345. а если переписать, то будет печатать то, что эта функция выдает. и вот получаетя, что если я вызываю эту функцию напрямую (print obj.__str__() ), то print ведет себя иначе, чем если print obj. ф-я возвращает юникод, и в первом случае принт выводит то, что там закодировано, а во втором - пытается декодировать с помощью ascii codec (видимо), и выдает особый случай, если встречает байт больше 128. могу, конечно, отказаться от print obj, но хочется понять, как работает это на самом деле. желательно, не залезая в исходник от print() (а если вы не поможете, то придется)
догадываюсь, что там происходит. расскажу мою догадку.
встроенная функция print() смотрит на тип, который она получает в аргументах. если он unicode - декодирует его и печатает. если это - объект какого-то класса, то вызывает его __str__() исходя из того, что та должна (как говорит название), вернуь не юникод, а str. и декодирует соотв. кодеком ascii (пытается). дефолтная __str__() выдаст str "<class '... .ClassA'>". а если мы ее переписываем,
то должны вернуть str, а не unicode. а я возвращаю unicode. но вчера целый день "читал гоголя" на эту тему, и везде очень длинно рассуждают, что такое юникод и кодирование вообще, и ничего конкретно о моем случае.
если моя догадка правильна, то не вижу решения (пока), кроме как переписать ф-ю не __str__, а __unicode__, и печатать print obj.__unicode__()
я уже сделал последнее. первое не понимаю как решит проблему (скорее усложнит), второе - такой сервер или не существует, или перестанет существовать в любой момент.
почему print всегда использует acsii-encoding?
Не всегда. acsii - это только кодировка по умолчанию. https://docs.python.org/2/library/locale.html?highlight=lc...
object.__str__(self) Called by the str() built-in function and by the print statement to compute the “informal” string representation of an object. The return value must be a string object.
В python есть типы данных string и unicode. Для unicode используется object.__unicode__(self)
это все я вчера многократно прочитал. чего я не нашел, это как сделать так, чтобы print obj печатала символы, не являющиеся частью ascii. можете набросать работающий пример из нескольких строчек? класс возьмем такой:
class ClassA(object): def __init__(self): self.s = 'München'я хочу, чтобы
... cls = ClassA() ... print cla ...выдавало München.
прочел эту статью:
http://kmike.ru/python-with-strings-attached/
, и понял, что сделать то, что я хочу "красиво" не получится, и бросаю эту затею.
https://docs.python.org/2.7/reference/lexical_analysis.htm...
Проверь для начала, в какой кодировке у тебя сами скрипты, и соответствует ли ей декларация кодировки в заголовке скриптов.
в моем случае кодировка скриптов до лампочки. "München" у меня не в скрипте, я его беру на стороне, это я для наглядности в примере его в скрипт вставил. факт тот, что print obj печатает результат, возвращаемый __str__ этого объекта, и предполагает, что там - строка ascii (и она ОБЯЗАНА возвращать именно это).
ладно, с этим разобрались. теперь решил загрузить на сервер mysql базу. прочитал, что это просто: делаешь дамп и импортируешь файл в phpmyadmin. c mysqldump все прошло быстро и красиво, а с импортом - сплошные неприятности. сперва он начал непонимать комментарии. повыбрасывал, ругается дальше. кто-нибудь делал подобные вещи? у них нечто mariadb. mysql-образное что-то.