0

MySQL と Python に関する質問があります。

このコマンドはシェルでは機能しますが、使用すると機能しません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 "テーブルを表示"']
エラー 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'])

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 に答える
0

個別のパラメーターはそれぞれ、パラメーターのリスト内の個別の要素である必要があります。

args.extend([MYSQL, '-D test', '-e "show tables"'])
于 2010-04-16T15:37:10.853 に答える