我正在使用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'
任何帮助将不胜感激。