5

単純な pexpect スクリプトを使用して、リモート マシンに ssh し、コマンドによって返された値を取得しています。UNIXの挨拶を無視するために使用できるpexpectまたはsshwiseの方法はありますか? つまり、から

    child = pexpect.spawn('/usr/bin/ssh %s@%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]

「最後に成功したログイン」と「(c)著作権」を無視して、値の正しい位置を気にすることなく、戻り値を取得するにはどうすればよいですか?

ありがとう !

4

4 に答える 4

5

ログインしているサーバーにアクセスできる場合は.hushlogin、ホームディレクトリに名前の付いたファイルを作成してみてください。このファイルが存在すると、標準のMOTDグリーティングなどが無音になります。

または、を試してくださいssh -T。これにより、端末の割り当てが完全に無効になります。シェルプロンプトは表示されませんが、コマンドを発行して応答を読み取ることはできます。

ServerFaultにも同様のスレッドがあり、これはあなたにとって役立つかもしれません。

于 2010-09-21T19:01:58.593 に答える
4

コマンドが対話型でない場合はssh HOST COMMAND、ログインの興奮をまったく起こさずに、実行してコマンドを実行できます。コマンド-t対話型の場合は、sshオプション( )を頻繁に使用して、ssh -t HOST COMMAND疑似tty割り当てを強制し、リモートプロセスをだましてTTYに接続されて実行されていると見なすことができます。

于 2010-09-21T19:00:40.510 に答える
0

paramiko を使用して ssh 接続を自動化しましたが、便利であることがわかりました。あいさつやサイレント実行に対応できます。

于 2010-09-21T19:13:22.163 に答える
0

sys モジュールと小さなクラスを使用して、すべてのノイズを殺すことができます。

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

そのスニペットを見つけた場所を思い出せませんが、それは私にとってはうまくいきます:)

于 2013-01-29T13:51:05.353 に答える