2015-02-23 3 views
1

Я хочу запустить мой скрипт python с моей локальной машины. Но скрипт python с именем script.py находится на удаленном сервере и имеет некоторые аргументы и параметры. Я пробовал:Запуск скрипта с удаленного сервера с использованием ssh в python

#!/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

+0

Да, я ... Но можно использовать аргументы script.py в этом скрипте? как? – MLSC

+0

Вы можете передать их в 'ssh.exec_command' функции! (но я не уверен, что эта функция поддерживает это!), но поддержка 'os.system'! – Kasramvd

ответ

0

Это сложнее, чем можно было бы подумать, благодаря 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' как один аргумент в другой программе. Хотя я бы не ручался за парамику, всегда поступая правильно.

+0

Спасибо ... Но что такое последний ')' вы положили его в ответ? – MLSC

+0

Это, вероятно, висячая закрывающая скобка вызова 'ssh.exec_command' –

Смежные вопросы