2015-04-17 3 views
1

Я хочу выполнить следующую команду из python. Когда я запускаю его из оболочки, я получаю желаемый результат, но вызываю его с подпроцессом, я получаю сообщение об ошибке.mysql command как подпроцесс python

Команда:

 to_date=`date +%Y-%m-%d`; mysql -uroot -p**** lportal -e "select COUNT(*) from User_ where loginDate like \"$to_date%\";" | sed 1d 

Это мой питон код:

from subprocess import * 

    cmd=''' to_date=`date +%Y-%m-%d`; mysql -uroot -p**** lportal -e "select COUNT(*) from User_ where loginDate like \"$to_date%\";" | sed 1d ''' 
    cmd_out=Popen(cmd,stdout=PIPE,stdin=PIPE,shell=True,stderr=PIPE).communicate() 
    print cmd_out 

Это ошибка я получаю, я знаю, что это \»отношение, но вратаря понять, как ее решить .

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-04-17%' at line 1 
+1

Почему вы это делаете, вместо того, чтобы напрямую использовать библиотеку mysql? –

ответ

0

Согласен с комментарием от @ Daniel Roseman, но вы пробовали одиночные кавычки вместо двойных кавычек на S Команда QL? Как это:

select COUNT(*) from User_ where loginDate like '$to_date%'; 

Или, может быть двойной обратной косой черты, чтобы избежать обратной косой черты, а не цитата, на строку питона ...

0

Есть ли причина, почему вы используете?

`date +%Y-%m-%d` 

Вместо:

import time 
date = time.strftime("%Y-%m-d", time.localtime()) 

Когда я делаю такие вещи, как это я всегда использовать этот метод:

import subprocess 
cmd = 'xterm -display {} -e {}'.format(display, command) 
status = subprocess.call(cmd.split()) 

команда будет гораздо чище читать:

cmd = 'mysql -u {} -p {} lportal -e "select COUNT(*) from User_ where loginDate like "{}" | sed 1d'.format(username, password, date) 

не смог проверить последний co mmand, так как у меня нет mysql здесь ...

Надеюсь, это поможет вам найти решение.


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

Смежные вопросы