Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Python & MySql

753  1 2 все
  moose старожил30.09.18 12:14
NEW 30.09.18 12:14 

можно ли из ру проверить, запущен ли на машине (той же самой) mysql, и запустить его если нет?

я уверен, что на ру "можно все, что могут другие", нужно только знать как : )

сейчас запускаю руками командой path/mysqld -- console. когда больше не нужен - останавливаю.

в принципе могу и дальше так жить, но мне для моих задач удобнее было бы, если бы он запускался "автоматически".

есть (и будут появляться) и другие вопросы, надеюсь, кто-нибудь сможет не них найти ответы.

#1 
NightWatch коренной житель30.09.18 12:31
NightWatch
  moose старожил30.09.18 13:06
NEW 30.09.18 13:06 
в ответ NightWatch 30.09.18 12:31

спасибо! уверен, по этой ссылке найду все необходимое.

#3 
MrSanders старожил30.09.18 14:18
NEW 30.09.18 14:18 
в ответ moose 30.09.18 12:14, Последний раз изменено 30.09.18 14:19 (MrSanders)

Ну, самое простое, наверное, попытаться соедениться с мусклем на локальном хосте. Должно даже одинаково и на линуксе и на виндусях работать.

Можно быстрее, но сложнее. Запускать mysql status. Емнип он дает exit code 0, если мускль работает.

#4 
  moose старожил30.09.18 18:07
NEW 30.09.18 18:07 
в ответ MrSanders 30.09.18 14:18

а покритикуйте это (или вроде этого):


import psutil
mysqld_found = False
for proc in psutil.pricess_iter():
    if prioc.name() == 'mysqld.exe':
        # mysqld is running
        mysqld_found = True
        break;
if not mysqld_found:
    # start mysqld ...
...
#5 
  moose старожил30.09.18 19:39
NEW 30.09.18 19:39 
в ответ NightWatch 30.09.18 12:31

а не подскажете, почему может быть такое. вот так запускаю майэскуэл:


>>> args = ['--console']
>>> pid = os.spawnv(os.P_NOWAIT, 'd:/mysql/bin/mysqld', args)

, он стартует, но не выдает ничего на консоль, а пишет в лог, будто проигнорировал параметр : (


#6 
MrSanders старожил30.09.18 20:01
NEW 30.09.18 20:01 
в ответ moose 30.09.18 18:07, Последний раз изменено 30.09.18 20:25 (MrSanders)

Почему быи нет. Кроме привязки к виндусям (.exe) всё нормально. Будет работать в 99% случаев. 1% это когда сервис бегает, но полумёртвый.

Да, ещё одно - стоит убедиться что psutil вернёт процессы всех пользователей.

#7 
MrSanders старожил30.09.18 20:30
NEW 30.09.18 20:30 
в ответ moose 30.09.18 19:39

мне смутно помнится что первым элементом в args должно быть имя команды. вроде

args=['mysqld','--console']
#8 
  moose старожил30.09.18 21:16
NEW 30.09.18 21:16 
в ответ MrSanders 30.09.18 20:01

у меня в итоге должно будет все бежать под каким-нибудь юниксоидом, но разрабатывать там мне несподручно. с другой стороны, чрезмерным универсализмом "для всех случаев и навека" заниматься неохота, поэтому разработается как есть, затем отладится там, где будет применяться, мне так (думаю пока) проще.

#9 
  moose старожил30.09.18 21:16
NEW 30.09.18 21:16 
в ответ MrSanders 30.09.18 20:30

спасибо, завтра попробую, наверное, заработает (ведь должно бы как-то)

#10 
NightWatch коренной житель01.10.18 10:14
NightWatch
NEW 01.10.18 10:14 
в ответ moose 30.09.18 19:39
будто проигнорировал параметр

Как сказал 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.

#11 
  moose старожил03.10.18 22:11
NEW 03.10.18 22:11 
в ответ MrSanders 30.09.18 20:30

спасибо, получилось.


попутный вопрос от чайника. неужели нельзя иметь переменную, видимую только в скопе модуля, не создавая классов?

#12 
MrSanders старожил04.10.18 09:46
NEW 04.10.18 09:46 
в ответ moose 03.10.18 22:11

А вот для таких вопросов я слишком давно делал что-либо с питоном... Насколько я помню, если просто задекларировать переменную в модуле, а потом импортировать этот модуль, переменная будет видна.

#13 
  moose старожил04.10.18 21:11
NEW 04.10.18 21:11 
в ответ MrSanders 04.10.18 09:46, Последний раз изменено 04.10.18 21:14 (moose)

оказывается, даже если в класс обернуть, все равно будет торчать наружу:


“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.

немножко подразочаровывает : (


но я опробовал основные "механизмы", которые мне нужны, все отлично работает, и, уверен, код, который напишу, будет правильно работать. но хотелось бы где-нибудь отсмотреть выработанную "практику хорошего кодирования" на пайтоне, чтобы не изобретать велосипед и не наступать на грабли. где?


#14 
Simple Nothing is f*cked05.10.18 07:49
Simple
NEW 05.10.18 07:49 
в ответ moose 04.10.18 21:11
немножко подразочаровывает : (

Не понимаю, почему. В той же джаве концепция java bean с точки зрения ооп ущербная, хотя и нельзя достучаться до закрытого члена класса.

#15 
  moose старожил05.10.18 12:08
NEW 05.10.18 12:08 
в ответ Simple 05.10.18 07:49

я тоже пока не понимаю, почему. просто ожидал другого. это для меня как если бы в си объявление const отсутствовало (или компилятор его игнорировал), и просто существовало бы соглашение, что если вы не хотите, чтобы объект кто-то менял, начните его ид с чего-то там. и не меняйте такие объекты. просто давайте повыбрасываем все замки и договоримся, что никто не будет воровать или трогать что-то, на чем написано "мое" : )


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

имеется сайт у провайдера, там в "корне" - index.html. я хочу каким-нибудь образом выполнить на сервере python-файл. думал (такой наивный!), вот сейчас переименую index.html -> index.html.bak, запишу туда index.py со строчкой print 'hello, world!', и, зайдя на сайт, увижу эту фразу. но вижу другое.

кто подскажет, как это правильно сделать? есть только ftp, для ssh нужно что-то дополнительно предпринять, хотелось бы обойтись насколько возможно. python у них установлен, я знаю где находится.

#16 
MrSanders старожил05.10.18 16:23
NEW 05.10.18 16:23 
в ответ moose 05.10.18 12:08

Никак, если у вас нет доступа к конфигурации веб-сервера. Это его надо настраивать чтобы он мог запускать питоновские скрипты.

#17 
  moose старожил05.10.18 16:37
NEW 05.10.18 16:37 
в ответ MrSanders 05.10.18 16:23, Последний раз изменено 05.10.18 16:39 (moose)

а я прочитал, что можно так:

помещаем в корень файл 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!!! отфильтровало часть тэгов. но смысл понятен, думаю.
#18 
  moose старожил05.10.18 18:00
NEW 05.10.18 18:00 
в ответ moose 05.10.18 16:37

ну вот, стоило только людям пожаловаться, как все решилось : ) "не стреляла потому что незаряженная была". почему-то дважды напечатал (как баден-баден : ), а нужно было

$command= escapeshellcmd('/usr/bin/python test0.py');

и не нужно ему 777, как все везде утверждают. в общем, кажется, все опробовано, можно начинать творить : )


#19 
MrSanders старожил06.10.18 02:07
NEW 06.10.18 02:07 
в ответ moose 05.10.18 18:00

да, сервер, запускающий из пыхыпы процессы это зашибись... Что ж это за провайдер такой, который disable_functions не использует?

Для поиграться такое решение вполне подойдёт.

#20 
1 2 все