MySQL через подпроцесс не работает - PullRequest
3 голосов
/ 12 февраля 2011
import os
import subprocess
cmdline = ['mysql -u"username" -p"password" < query.sql']
p = subprocess.Popen(cmdline,stdout=subprocess.PIPE)
stdout,stderr = p.communicate()
retcode = p.wait()

Это мой код для подключения к mysql и выполнения query.sql.Выглядит хорошо для меня, но это не работает, и плохо, что я не получаю никаких сообщений об ошибках вообще.retcode равен 1 и из stdout, stderr я получаю только стандартный текст mysql «Использование mysql [ОПЦИИ] [База данных] ...», поэтому я подумал, что мой синтаксис неправильный.Но это не так.Я проверил строку кода в терминале, и она работает.

Есть ли у Python проблемы с выполнением этого через подпроцесс?Я просто хочу простой способ выполнить этот маленький код MySQL.Спасибо.

Ответы [ 2 ]

6 голосов
/ 12 февраля 2011
cmdline = ['mysql -u"username" -p"password" < query.sql']

Это не способ использовать Popen.Программа должна быть первым элементом списка, и каждый передаваемый аргумент также должен быть элементом списка.Так что скорее должно быть cmdline = ["mysql", "-u", username, "-p", password].Кроме того, это не оболочка, поэтому вы не можете просто использовать «stdin = PIPE, а затем передайте SQL-запрос, например p.communicate(sqlQuery).

retcode = p.wait()

. Вы уже ждали, когда процесс завершит использование .communicate(), поэтому вы должны получить доступ к возвращаемому значению с помощьюp.returncode атрибут.

2 голосов
/ 12 февраля 2011

Это не прямой ответ, но если вы пытаетесь вызвать MySQL из python, обычно проще и более управляемо вызывать через библиотеку DBAPI см. Вики Python или далее как ORM, например SQLAlchemy

Пример вызова mySQL: здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...