subprocess
Python とそのモジュールを使用して、Linux からいくつかの Mysql コマンドを実行したいと考えています。
Python なしで、シェルから、私のコマンドラインは次のとおりです。
mysql --database=mydb --host=localhost --port=3306 --password= --execute="select * from mytable" --batch
Python では、次のものがあります。
cmd = ['mysql']
cmd.extend(['--database=', self._database])
cmd.extend(['--password=', self._password])
cmd.extend(['--execute=', query])
(...)
p = subprocess.Popen(cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
out, err = p.communicate()
errcode = p.returncode
残念ながら、それは機能しません (mysql は使用法を出力するだけです) ' '.join(cmd)
。
mysql --database= mydb --host= localhost --port= 3306 --password= --execute= "select * from mytable" --batch
すなわち。と値を区切って、各パラメーターの間にスペースが追加され=
ます。
=
すべてのパラメーター ( )を削除するcmd.extend(['--password', self._password])
と、パラメーターが無効な場合を除いて正常に動作します (そのため、各パラメーターが無効かどうかをテストし、必要に応じて削除します)。
最後に、void パラメーターをテストすることで回避策を見つけましたが、今後の参考のために、この種の処理方法がわからないサブプロセスのヒントや使用法はありparameter=
ますか? を使用=
しなければならないアプリケーションがあるに違いありませんShell=True
。