0

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

此命令适用于 shell,但在我使用os.execvp.

$./mysql -D test -e "显示表格"

+----------------+
| Tables_in_test |
+----------------+
| 样品 |
+----------------+

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"']
错误 1049 (42000): 未知数据库 'test -e "show tables"'

我不确定这是否是 Python 语法的问题。此外,相同的命令适用于os.system调用。

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

请让我知道如何使它工作。

4

2 回答 2

0

每个单独的参数都需要是参数列表中的单独元素。

args.extend([MYSQL, '-D test', '-e "show tables"'])
于 2010-04-16T15:37:10.853 回答
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。

于 2010-04-17T01:58:17.993 回答