希望运行命令: ssh user@some_host "echo 'some_sql‘| /usr/bin/mysql -u some_args“
我该如何使用Popen来做这件事呢?
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。
发布于 2011-08-27 06:11:12
也许将所有这些合并到一个命令中?
p1 = sp.Popen(["ssh", "user@some_host", "echo \"%s\" | mysql -u ..." % sql], stdout=sp.PIPE)发布于 2011-08-27 06:27:54
我根本不会使用Popen,而是使用paramiko
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"')发布于 2011-08-27 06:12:01
subprocess始终在本地计算机上运行命令。如果希望通过SSH运行命令,则需要通过标准输入将命令作为输入传递给ssh进程,或者在启动ssh时将命令作为参数传递。
然而,一个更好的想法可能是使用一个专为运行远程命令(如fabric )而设计的库。
https://stackoverflow.com/questions/7211031
复制相似问题