展望运行命令:SSH用户@ some_host “回声 'some_sql' |在/ usr/bin中/ MySQL的-u some_args”POPEN远程命令
我将如何做到这一点使用POPEN?
返回 “OSERROR:[错误2]没有这样的文件或目录”,因为它是寻找本地机器上的/ usr/bin中/ MySQL的。
展望运行命令:SSH用户@ some_host “回声 'some_sql' |在/ usr/bin中/ MySQL的-u some_args”POPEN远程命令
我将如何做到这一点使用POPEN?
返回 “OSERROR:[错误2]没有这样的文件或目录”,因为它是寻找本地机器上的/ usr/bin中/ MySQL的。
也许把它全部组合成一个单一的命令?
p1 = sp.Popen(["ssh", "[email protected]_host", "echo \"%s\" | mysql -u ..." % sql], stdout=sp.PIPE)
subprocess
总是在本地机器上运行命令。如果你想通过SSH运行命令,你需要通过stdin将命令作为输入传递给你的ssh
进程,或者当你启动ssh时作为参数传递。
但是,一个更好的主意可能是使用专为运行远程命令(如fabric
)而设计的库。
我根本不会使用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"')
针对黄色时,OP说,他正试图运行命令:
SSH用户@ some_host “回声 'some_sql' |在/ usr/bin中/ MySQL的-u some_args”
所以他很清楚,将命令作为“当您启动ssh时的参数”传递。
paramiko是一个很好的工具 – timger
是的,或者'Pexpect'是另一个易于使用的解决方案 – wim