2010-04-16 54 views
0

我有一个与MySQL和Python有关的问题。python os.execvp()试图显示mysql表给出1049错误 - 未知数据库错误

该命令适用于shell,但不适用于我使用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"') 

请让我知道如何让这个工作。

回答

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, ...])和你没有以fork + exec自己,退出状态是IIRC的返回值。