python os.execvp() при попытке отобразить таблицы mysql выдает ошибку 1049 - неизвестная ошибка базы данных
У меня есть вопрос, связанный с MySQL и Python.
Эта команда работает на оболочке, но не когда я использую os.execvp
,
$./mysql -D test -e "показать таблицы" +----------------+ | Tables_in_test | +----------------+ | образец | + ---------------- +
Соответствующий кусок кода в Python будет
def execute():
args = []
args.extend(sys.argv[1:])
args.extend([MYSQL, '-D test -e "show tables"'])
print args
os.execvp(args[0], args)
child_pid = os.fork()
if child_pid == 0:
os.execvp(args[0], args)
else:
os.wait()
Выход этого:
[./mysql ',' -D test -e "показать таблицы"'] ОШИБКА 1049 (42000): неизвестная база данных ' test -e "показать таблицы"'
Я не уверен, если это проблема с синтаксисом Python или нет. Кроме того, та же команда работает с os.system
вызов.
os.system(MYSQL + ' -D test -e "show tables"')
Пожалуйста, дайте мне знать, как заставить это работать.
2 ответа
Пытаться:
args.extend([MYSQL, '-D', 'test', '-e', 'show tables'])
Вы также можете быть заинтересованы в subprocess
модуль, если вы не знали об этом:
>>> import subprocess as subp
>>> print subp.Popen(["mysql", '-D', 'mysql', '-e', 'show tables'], stdout=subp.PIPE).communicate()[0]
Tables_in_mysql
columns_priv
db
func
help_category
help_keyword
help_relation
...
Или просто subp.call([MYSQL, ...])
и вам не нужно форк +exec самостоятельно, статус выхода - это возвращаемое значение IIRC.
Каждый из ваших отдельных параметров должен быть отдельным элементом в списке параметров.
args.extend([MYSQL, '-D test', '-e "show tables"'])