首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打开远程命令

打开远程命令
EN

Stack Overflow用户
提问于 2011-08-27 06:08:26
回答 4查看 2K关注 0票数 1

希望运行命令: ssh user@some_host "echo 'some_sql‘| /usr/bin/mysql -u some_args“

我该如何使用Popen来做这件事呢?

代码语言:javascript
复制
p1 = sp.Popen(["ssh", "user@some_host", "echo \"%s\"" % sql], stdout=sp.PIPE)
p2 = sp.Popen(["/usr/bin/mysql", "-u some_args"], stdin=p1.stdout, stdout=sp.PIPE)

返回"OSError: Errno 2没有这样的文件或目录“,因为它正在本地计算机上查找/usr/bin/mysql。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-27 06:11:12

也许将所有这些合并到一个命令中?

代码语言:javascript
复制
p1 = sp.Popen(["ssh", "user@some_host", "echo \"%s\" | mysql -u ..." % sql], stdout=sp.PIPE)
票数 1
EN

Stack Overflow用户

发布于 2011-08-27 06:27:54

我根本不会使用Popen,而是使用paramiko

代码语言:javascript
复制
import paramiko

ssh_client = paramiko.SSHClient()
ssh_client.load_system_host_keys()
ssh_client.connect('www.somehost.com', username='user')
ssh_client.exec_command(' "echo 'some_sql' | /usr/bin/mysql -u some_args"')
票数 4
EN

Stack Overflow用户

发布于 2011-08-27 06:12:01

subprocess始终在本地计算机上运行命令。如果希望通过SSH运行命令,则需要通过标准输入将命令作为输入传递给ssh进程,或者在启动ssh时将命令作为参数传递。

然而,一个更好的想法可能是使用一个专为运行远程命令(如fabric )而设计的库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7211031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档