在pexpect 2.3中忽略信号挂断

时间:2016-06-11 19:41:34

标签: python linux cloud signals pexpect

我正在使用python 2.6.6和pexpect 2.3

我使用pexpect在远程服务器中使用以下方法执行脚本。

def doSsh(user,password,host,command):
    try:
        child =  pexpect.spawn("ssh  -o ServerAliveInterval=100 -n %s@%s '%s'" % (user,host,command), logfile=sys.stdout, ignore_sighup=True, timeout=None)
        i = child.expect(['password:', r'\(yes\/no\)',r'.*password for paasusr: ',r'.*[$#] ',pexpect.EOF])
        if i == 0:
                child.sendline(password)
        elif i == 1:
                child.sendline("yes")
                child.expect("password:")
                child.sendline(password)
        data = child.read()
        print data
        child.close()
        return True
    except Exception as error:
        print error
        return False 

我称之为:

doSsh(vmUser,vmPasswd,vmName,'cd '+OutputDir+';python cvm-bringup.py setup')

问题是此执行需要~6小时才能完成。因此,95%的时间是从孩子那里收到的,并且父脚本会在不再进一步的情况下死亡。

有没有办法忽略SIGHUP?

我尝试将选项ignore_sighup=True放在spawn中。但它不起作用并且犯了错误:

__init__() got an unexpected keyword argument 'ignore_sighup'

任何帮助将不胜感激。

0 个答案:

没有答案