2010-09-21 28 views
5

Uzak bir makineye ssh için basit bir pexpect komut dosyası kullanıyorum ve bir komut tarafından döndürülen bir değer yakaladım. Unix selamını görmezden gelmek için kullanabilir miyim pexpect veya sshwise?Pexpect - sessizlik ssh bağlantı çıkışı

child = pexpect.spawn('/usr/bin/ssh %[email protected]%s' % (rem_user, host)) 
    child.expect('[pP]assword: ', timeout=5) 
    child.sendline(spass) 
    child.expect([pexpect.TIMEOUT, prompt]) 
    child.before = '0' 
    child.sendline ('%s' % cmd2exec) 
    child.expect([pexpect.EOF, prompt]) 

    # Collected data processing 
    result = child.before 
    # logon to the machine returns a lot of garbage, the returned executed command is at the 57th position 
    print result.split('\r\n') [57] 
    result = result.split('\r\n') [57] 

dan , basitçe nasıl değer doğru konuma sahip endişe gerek kalmadan, "Son başarılı giriş" ve "(c) Telif Hakkı" şeyler ve görmezden, döndürülen değer elde edebilirsiniz?

Teşekkürler! Komut etkileşimli değilse

cevap

4

, evde dizininde .hushlogin adlı bir dosya oluşturmayı deneyebilirsiniz. Bu dosyanın varlığı standart MOTD tebrik ve benzeri şeyleri susturur.

Seçenek olarak, terminal tahsis tamamen devre dışı bırakır ssh -T, deneyin; Bir kabuk istemi almayacaksınız, ancak yine de komutlar verebilir ve yanıtı okuyabilirsiniz.

size bazı yarayabilir ServerFault benzer bir iplik de vardır.

+0

Teşekkürler. Ana bilgisayara erişiyorum ancak orada hiçbir şeyi düzenleme iznim yok. ssh -t güzel çalışıyor. –

4

, sadece tüm giriş heyecan hiç şey olmadan komutu çalıştırmak için ssh HOST COMMAND çalıştırabilirsiniz. Komut interaktif ise, sık sık bir TTY bağlı çalışıyor olduğunu düşünmeye uzaktan sürecini sözde tty tahsisini zorlamak ve kandırmak için ssh -t seçeneği (ssh -t HOST COMMAND) kullanabilir. Sunucuya erişim Giriş yapmakta oldukları varsa

+0

Teşekkürler. Tam olarak ihtiyacım olan şey! Voted Tamás cevap verdi, çünkü biraz daha tamamlanmıştı, ama yapabilseydim cevap verdim! –

0

ben SSH bağlantısı otomatik hale getirmek paramiko kullanmış ve bunu yararlı bulmuştur. Selamlaşmalar ve sessiz yürütme ile baş edebilir.

+0

Teşekkürler. Pexpect'i keşfettiğimde zaten ona çarptı ama denemedim. Bu sefer yapacak. –

0

Selam size kann sys modülü ve küçük bir sınıfını kullanarak tüm bu gürültü öldürmek: ben bu parçacık bulundu ama nerede çalıştığını

class StreamToLogger(object): 
    """ 
    Fake file-like stream object that redirects writes to a logger instance. 
    """ 
    def __init__(self, logger, log_level=logging.INFO): 
     self.logger = logger 
     self.log_level = log_level 
     self.linebuf = '' 

    def write(self, buf): 
     for line in buf.rstrip().splitlines(): 
      self.logger.log(self.log_level, line.rstrip()) 


#Mak 
stdout_logger = logging.getLogger('STDOUT') 
sl = StreamToLogger(stdout_logger, logging.INFO) 
sys.stdout = sl 



stderr_logger = logging.getLogger('STDERR') 
sl = StreamToLogger(stderr_logger, logging.ERROR) 
sys.stderr = sl 

hatırlamıyorum Benim için :)