python os.execvp() 显示 mysql 数据表时出现1049错误 - 未知数据库错误

0 投票
2 回答
713 浏览
提问于 2025-04-15 21:41

我有一个关于MySQL和Python的问题。

这个命令在命令行中可以正常运行,但当我用os.execvp时就不行了。

$./mysql -D test -e "show tables"

+----------------+
| Tables_in_test |
+----------------+
| sample         |
+----------------+

在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 "show tables"']
ERROR 1049 (42000): Unknown database ' test -e "show tables"'

我不确定这是不是Python语法的问题。另外,同样的命令用os.system调用时可以正常工作。

os.system(MYSQL + ' -D test -e "show tables"')

请告诉我如何让这个正常运行。

2 个回答

0

你每一个单独的参数都需要在参数列表中作为一个单独的元素。

args.extend([MYSQL, '-D test', '-e "show tables"'])
0

试试这个:

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, ...]),这样你就不需要自己去分叉和执行了,退出状态会作为返回值,我记得没错的话。

撰写回答