python os.execvp() 显示 mysql 数据表时出现1049错误 - 未知数据库错误
我有一个关于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, ...])
,这样你就不需要自己去分叉和执行了,退出状态会作为返回值,我记得没错的话。