2010-04-16 4 views
0

MySQL 및 Python과 관련된 질문이 있습니다.python os.execvp() mysql 테이블을 표시하려고하면 1049 오류가 발생합니다 - 알 수없는 데이터베이스 오류

이 명령은 셸에서 작동하지만 os.execvp을 사용하면 작동하지 않습니다.

 
[./mysql', '-D test -e "show tables"'] 
ERROR 1049 (42000): Unknown database ' test -e "show tables"' 

나는이 파이썬 구문에 문제가있는 경우 확실하지 않다 나 :

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

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

파이썬 코드의 해당 부분이의 출력은

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() 

일 것 아니. 또한 동일한 명령이 os.system 호출과 함께 작동합니다.

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

이 방법을 알려주십시오.

답변

0

각 개별 매개 변수는 매개 변수 목록에서 별도 요소 여야합니다.

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

시도 :

>>> 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, ...]) 당신이없는 : 당신이 그것을 알고 아니었다면

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

당신은 또한 subprocess 모듈에 관심이있을 수 있습니다 fork + exec를 수행 할 때 종료 상태는 IIRC 반환 값입니다.

관련 문제