子进程中带有隧道的Python ssh

2024-04-26 10:19:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一些python脚本,我想通过SSH连接对MySQL服务器进行隧道化,并执行一些SQL请求。在

import MySQLdb  
import os

handle = os.popen('ssh config -L 3306:127.0.0.1:3306')
db = MySQLdb.connect(host="127.0.0.1",
                     user="Username",
                     passwd="Secret",
                     db="dbName")
cur = db.cursor()
cur.execute("SELECT * FROM tablename")
for row in cur.fetchall():
      print row[1]
db.close()
handle.close()

连接工作正常,但在执行后不会关闭脚本(子进程),而且在每个打印行前面添加了一些空白。在

感谢您的阅读,并提前感谢您。在


Tags: import脚本closedbsqlosmysqlssh
1条回答
网友
1楼 · 发布于 2024-04-26 10:19:51

我还没有测试过这个,但是,^{}已经过时了。请改用subprocess模块。在

Deprecated since version 2.6: This function is obsolete. Use the subprocess module. Check especially the Replacing Older Functions with the subprocess Module section.

使用subprocess可以终止进程(使用os.popen无法轻松完成此操作,因为close只关闭了句柄)

handle = subprocess.Popen('ssh config -L 3306:127.0.0.1:3306'.split())
...
handle.kill()

注意split部分传递一个参数列表而不是字符串。这很快,但有些操作系统不支持向Popen传递字符串。正确的方法是:["ssh","config","-L","3306:127.0.0.1:3306"],这样就可以透明地传递带有空格的参数。在

相关问题 更多 >