在python中使用ssh从远程服务器运行脚本

问题描述:

我想从本地机器运行我的python脚本。但名为script.py的python脚本位于远程服务器中,它具有一些参数和参数。 我曾尝试:在python中使用ssh从远程服务器运行脚本

#!/usr/bin/python 
import paramiko 

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(hostname='x.x.x.x', port=22, username='root', password='passwd') 
stdin, stdout, stderr=ssh.exec_command('python /root/file/script.py') #It has some argument I want to use them from my local machine 
for i in stdout.readlines(): 
    print i.strip('\r\n') 
ssh.close() 

script.py有一些争论。我应该如何改变这个脚本以便从我的本地机器使用参数script.py

+0

你熟悉'sys.argv'吗?你可以在脚本中使用它来传递终端中的参数! https://docs.python.org/2/library/sys.html#sys.argv – Kasramvd 2015-02-23 07:54:08

+0

是的,我是...但在脚本中使用script.py的参数是可能的?怎么样? – MLSC 2015-02-23 07:59:08

+0

你可以在'ssh.exec_command'函数中传递它们! (但我不知道这个功能支持!),但'os.system'支持! – Kasramvd 2015-02-23 08:04:01

它比人会认为更靠谱,由于使用SSH不支持的参数列表:

import sys 
try: 
    from pipes import quote # python 2 
except ImportError: 
    from shlex import quote # python 3 

ssh.exec_command('python /root/file/script.py ' + 
    ' '.join([quote(i) for i in sys.argv[1:]]) 
) 

当运行python myprogram.py argument\ with" quotes\" and spaces",这应该通过'argument with quotes" and spaces'为1参数传递给其他程序。虽然我不会保证paramiko总是做正确的事情。

+0

谢谢......但是,你把它放在回答部分中的最后一个''是什么? – MLSC 2015-02-23 08:04:41

+0

它恰好是'ssh.exec_command'调用的悬挂右括号 – 2015-02-23 08:08:30