2015-08-25 4 views
0

Я пытаюсь запустить скрипт python от хоста к некоторым клиентам через subprocess.popen. Команда - это своего рода огонь и забудьте, и процесс в клиентах должен выполняться неограниченное время, пока я не убью его. проблема - когда я запустить эту строку в Python протеканию процесса на клиентах в течение часа, а затем внезапно останавливается через 1 час и 2 минуты:using subprocess.popen с ssh - python

subprocess.Popen(["rsh {} {} {}".format(ipClient,command,args)], shell=True) 

, где «команда» путь и команда в клиентов. , и когда я просто запускаю rsh 'ip' 'command' 'args' в оболочке, он работает должным образом и не останавливается внезапно.

любая идея?

+0

Не решает проблему, но вы должны использовать 'subprocess.Popen ([" rsh ", ipClient, command, arg с]) '. Python делает что-то параллельно? – Daniel

+0

Вы можете сообщить об ошибке? – amirouche

+0

не сообщается об ошибке, процесс на клиенте останавливается – aa1331

ответ

0

В то время как subprocess.Popen может работать для обхода ssh доступа, это не самый предпочтительный способ сделать это.

Я рекомендую использовать paramiko.

import paramiko 
ssh_client = paramiko.SSHClient() 
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh_client.connect(server, username=user,password=password) 
... 
ssh_client.close() 

И если вы хотите, чтобы имитировать терминал, как если бы пользователь печатал:

chan=self.ssh_client.invoke_shell() 

def exec_cmd(cmd): 
    """Gets ssh command(s), execute them, and returns the output""" 
    prompt='bash $' # the command line prompt in the ssh terminal 
    buff='' 
    chan.send(str(cmd)+'\n') 
    while not chan.recv_ready(): 
     time.sleep(1) 
    while not buff.endswith(prompt): 
     buff+=self.chan.recv(1024) 
    return buff[:len(prompt)] 

Пример использования: exec_cmd('pwd')

Если вы не знаете, приглашение заранее, вы может установить его с помощью:

chan.send('PS1="python-ssh:"\n') 
+0

Насколько я знаю, 'paramiko' зависает, если выход превышает несколько MB. – jfs

+0

Пробовал это тоже ... все еще останавливается через 1 час и 2 минуты ... – aa1331

+0

Тогда, вероятно, это отключение на стороне сервера, попробуйте эту конфигурацию: http://go2linux.garron.me/linux/2011/02/limit- проаяся SSH-сессии время избегает-необслуживаемых-оны-ClientAliveInterval-clientalivecoun / –

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