2010-04-16 84 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的返回值。