python - 在 Python 的不同终端中打开 SSH session 并运行命令

标签 python mysql

下面是我手动执行的过程,我想用 Python 将其自动化。

  1. 我正在使用以下命令打开 MySQL 服务器的 SSH 终端
cf ssh -L 63380:100.120.11.22:3380 appname
  1. 建立 SSH 后,我将执行 ctrl+t 打开一个新的终端选项卡并运行以下命令来创建数据库对象
mysql -u myuser -h 0 -pmypassword -D mydbname -P 3380 < init_db/mysql/schema.ddl

现在我已经为步骤 1 编写了 Python 代码,如下所示

process = subprocess.Popen("cf ssh -L 63380:100.120.11.22:3380 appname",shell = True)

它打开 SSH 终端,但是当使用下面的代码运行第二步时,它没有连接到打开的 SSH 终端,它说无法连接到 MySQL 服务器。

pro = subprocess.Popen("mysql -u myuser -h 0 -pmypassword -D mydbname -P 3380 < init_db/mysql/schema.ddl", stdout=subprocess.PIPE,shell=True, preexec_fn=os.setsid) 

我已经搜索并尝试了其他选项,例如在不同的程序中编写步骤 2 并在 SSH 建立后从第一个程序调用但没有用。

请让我知道 Python 中是否有任何可用的解决方案。 环境:mac、pcf。

最佳答案

在我看来是这样的命令:

cf ssh -L 63380:100.120.11.22:3380 appname

ssh 到您的 CloudFoundry 应用程序服务器,并将本地计算机端口 63380 上的任何连接转发到远程端口 3380。因此您的 mysql 连接似乎应该是:

mysql -u myuser -h localhost -pmypassword -D mydbname -P 63380 < init_db/mysql/schema.ddl

init_db/mysql/schema.ddl 在您的本地机器上。

我不完全确定这是否适用于 CloudFoundry,但是使用 ssh 你可以像这样运行远程命令:

ssh username@<host or ip> <command>
#for example:
ssh myname@example.com ls -al

因此您可以尝试将 ~/init_db/mysql/schema.dll 放在服务器上并使用此命令:

cf ssh appname mysql -u myuser -pmypassword -Dmydbname -P 3380 < ~/init_db/mysql/schema.dll

您应该能够将该命令放入 python 的 subprocess.Popen() 中。

关于python - 在 Python 的不同终端中打开 SSH session 并运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52009732/

相关文章:

MySQL 解释 - 需要索引建议/反馈

mysql - 有限制的分组是如何工作的

mysql - 获取MySQL索引上次使用时间?

Python 函数引用

python - 在 Python 中创建不可变对象(immutable对象)

python - python多处理中的动态工作池管理

mysql - 在mysql中插入新行时如何使用触发器插入连接值

python - 2 个相同的字符串 "not equal"[Python]

python - 如何导入一个位于上方两个目录和下方一个目录中的 Python 类?

mysql - 如果 MySQL 中存在列,则删除行