Python & MySql
можно ли из ру проверить, запущен ли на машине (той же самой) mysql, и запустить его если нет?
я уверен, что на ру "можно все, что могут другие", нужно только знать как : )
сейчас запускаю руками командой path/mysqld -- console. когда больше не нужен - останавливаю.
в принципе могу и дальше так жить, но мне для моих задач удобнее было бы, если бы он запускался "автоматически".
есть (и будут появляться) и другие вопросы, надеюсь, кто-нибудь сможет не них найти ответы.
Ну, самое простое, наверное, попытаться соедениться с мусклем на локальном хосте. Должно даже одинаково и на линуксе и на виндусях работать.
Можно быстрее, но сложнее. Запускать mysql status. Емнип он дает exit code 0, если мускль работает.
а не подскажете, почему может быть такое. вот так запускаю майэскуэл:
>>> args = ['--console']
>>> pid = os.spawnv(os.P_NOWAIT, 'd:/mysql/bin/mysqld', args)
, он стартует, но не выдает ничего на консоль, а пишет в лог, будто проигнорировал параметр : (
Почему быи нет. Кроме привязки к виндусям (.exe) всё нормально. Будет работать в 99% случаев. 1% это когда сервис бегает, но полумёртвый.
Да, ещё одно - стоит убедиться что psutil вернёт процессы всех пользователей.
у меня в итоге должно будет все бежать под каким-нибудь юниксоидом, но разрабатывать там мне несподручно. с другой стороны, чрезмерным универсализмом "для всех случаев и навека" заниматься неохота, поэтому разработается как есть, затем отладится там, где будет применяться, мне так (думаю пока) проще.
будто проигнорировал параметр
Как сказал MrSanders "первым элементом в args должно быть имя команды."
https://docs.python.org/2/library/os.html#process-manageme...
In either case, the arguments to the child process must
start with the name of the command being run.
оказывается, даже если в класс обернуть, все равно будет торчать наружу:
“Private” instance variables that cannot be accessed except from inside an object don’t exist in Python. However, there is a convention that is followed by most Python code: a name prefixed with an underscore (e.g. _spam) should be treated as a non-public part of the API (whether it is a function, a method or a data member). It should be considered an implementation detail and subject to change without notice.
немножко подразочаровывает : (
но я опробовал основные "механизмы", которые мне нужны, все отлично работает, и, уверен, код, который напишу, будет правильно работать. но хотелось бы где-нибудь отсмотреть выработанную "практику хорошего кодирования" на пайтоне, чтобы не изобретать велосипед и не
наступать на грабли. где?
я тоже пока не понимаю, почему. просто ожидал другого. это для меня как если бы в си объявление const отсутствовало (или компилятор его игнорировал), и просто существовало бы соглашение, что если вы не хотите, чтобы объект кто-то менял, начните его ид с чего-то там. и не меняйте такие объекты. просто давайте повыбрасываем все замки и договоримся, что никто не будет воровать или трогать что-то, на чем написано "мое" : )
я продолжу в этой ветке вопросы, не всегда касающиеся темы, возможно, этот вопрос следовало бы задать в разделе вэбхостинг, но там, похоже, заповедник, который редко посещается.
имеется сайт у провайдера, там в "корне" - index.html. я хочу каким-нибудь образом выполнить на сервере python-файл. думал (такой наивный!), вот сейчас переименую index.html -> index.html.bak, запишу туда index.py со строчкой print 'hello, world!', и, зайдя на сайт, увижу эту фразу. но вижу другое.
кто подскажет, как это правильно сделать? есть только ftp, для ssh нужно что-то дополнительно предпринять, хотелось бы обойтись насколько возможно. python у них установлен, я знаю где находится.
а я прочитал, что можно так:
помещаем в корень файл index.php:
<!--filtered--> <!--filtered--> <!--filtered--> <!--filtered-->"; $command= escapeshellcmd('/usr/bin/python/python test0.py'); $output = shell_exec($command); echo $output; echo "bye PHP"; ?> <!--filtered--> <!--filtered-->
и здесь же лежит файл test0.py
#!/usr/bin/env python print 'here python'
но вижу только
hi php
bye php
правда, mod test0.py 644, и я не знаю, как его поменять без ssh : (
oops!!! отфильтровало часть тэгов. но смысл понятен, думаю.ну вот, стоило только людям пожаловаться, как все решилось : ) "не стреляла потому что незаряженная была". почему-то дважды напечатал (как баден-баден : ), а нужно было
$command= escapeshellcmd('/usr/bin/python test0.py');
и не нужно ему 777, как все везде утверждают. в общем, кажется, все опробовано, можно начинать творить : )