我写了一些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()
连接工作正常,但在执行后没有关闭脚本(子进程),而且它在每个打印行的前面添加了一些空格。
感谢您的阅读并提前感谢您。
答案 0 :(得分:1)
我还没有测试过这个,但os.popen
已经过时了。请改用subprocess
模块。
从2.6版开始不推荐使用:此功能已过时。使用子进程模块。请特别检查“使用子过程模块替换旧函数”部分。
使用subprocess
,您将能够终止该过程(由于os.popen
仅关闭句柄,因此close
无法轻松完成此操作。
handle = subprocess.Popen('ssh config -L 3306:127.0.0.1:3306'.split())
...
handle.kill()
注意split
部分传递args列表而不是字符串。这很快&脏,但有些操作系统不支持将字符串传递给Popen
。正确的方法是:["ssh","config","-L","3306:127.0.0.1:3306"]
所以你可以透明地传递带有空格的args。