如何将子过程中的密码传递给MySQL

问题描述 投票:0回答:2

我需要来自MySQL的超快速响应,因此我试图通过直接连接到MySQL来处理此问题:

command = ['mysql', '-u', 'root', '-p']
proc = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
(out, err) = proc.communicate("password")

但是使用此代码,我没有任何回应。

python mysql subprocess
2个回答
0
投票

subprocess.Popen()通话中缺少的一件事是stdin=subprocess.PIPE。从docs

注意,如果要将数据发送到流程的stdin,则需要使用stdin = PIPE创建Popen对象。

proc = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE)

但是,我不确定这是否仍然有效。我建议使用pymysqlhttps://github.com/PyMySQL/PyMySQL)。

这是使用pymysql创建连接的示例:

import pymysql.cursors
connection = pymysql.connect(host='localhost',
                           user='root',
                           password='password',
                           db='my database',
                           charset='utf8mb4',
                           cursorclass=pymysql.cursors.DictCursor)

0
投票

我通过这种方式解决了我的问题:

proc = subprocess.Popen("mysql -h localhost -u root -pMYPASSWORD dbname",
                        stderr=subprocess.STDOUT,
                        stdout=subprocess.PIPE,
                        stdin=subprocess.PIPE,
                        shell=True)

现在我可以进行查询:

(out, err) = proc.communicate(b"SELECT * FROM AnyTable;")
print("out", out.decode('utf-8'))
© www.soinside.com 2019 - 2024. All rights reserved.