3

pexpect ライブラリを使用して Python スクリプトを作成しようとしています。

私がやろうとしていることは次のとおりです:

ID = 'User1'
cmdrun = 'A LINUX COMMAND'
sshChild = pexpect.spawn('ssh root@192.168.0.1')
sshOut = file('sshLog.txt','w')
sshChild.logfile = sshOut
sshChild.expect('Last login:*')
sshChild.expect('Please enter your login Id')
sshChild.sendline(ID + '\r')
sshChild.sendline('ssh 192.168.21.1\r')
sshChild.expect('Last login:*')
sshChild.expect('Please enter your login Id')
sshChild.sendline(ID + '\r')
sshChild.sendline(cmdrun + '\r')

cmdrunのsendlineを実行する最後の行まで、すべてが期待どおりに機能します。このコマンドはカスタム tcpdump コマンドです。sendctrl('C') を実行してコマンドを強制終了し、ssh トンネルをエスケープするまで、コマンドを無期限に実行したいと考えています。

ただし、 sendline(cmdrun + '\r') の後に interact() を配置しない限り、tcpdump からの出力は出力されません。

とにかく、対話型の端末制御が必要ないので、対話なしでこれを行うことができますか? 私が望むのは、tcpdump出力をキャプチャして一定期間待機し、sshトンネルとともにtcpdumpを強制終了できるようにすることです。

4

1 に答える 1

1

長時間実行されるコマンドに pexpect を使用したことはありません。ただし、次のことを試すことができます。

Pexpect はコマンドの完了を待機し、出力を提供します。

sshChild.sendline(cmdrun + '\r')

これは長時間実行されるコマンドであるため、実行しない限り出力は得られません。

child.interact()

適切なタイムアウトでコマンドを実行した後、これを試して、一定時間後に長時間実行されているコマンドを強制終了し、それまでに取得した出力をキャプチャできますか。

sshChild.sendline(cmdrun + '\r')
child.expect(pexpect.EOF, timeout=20)
print child.before, child.after
于 2012-09-14T16:40:16.100 に答える