6

タスクを自動化するためにpythons pexpectモジュールを使用しています.sendcontrolで使用するキー文字を理解するのに助けが必要です. どのようにコントロールキー ENTER を送信できますか? 今後の参考のために、どのように重要な文字を見つけることができますか?

ここに私が取り組んでいるコードがあります。

#!/usr/bin/env python

import pexpect

id = pexpect.spawn ('ftp 192.168.3.140')

id.expect_exact('Name')

id.sendline ('anonymous')

id.expect_exact ('Password')
*# Not sure how to send the enter control key
id.sendcontrol ('???')* 

id.expect_exact ('ftp')

id.sendline ('dir')

id.expect_exact ('ftp')

lines = id.before.split ('\n')

for line in lines :
        print line
4

1 に答える 1

12

pexpectにはメソッドがありませんsendcontrol()。あなたの例では、空の行を送信しようとしているようです。これを行うには、次を使用します。

    id.sendline('')

実際の制御文字を送信する必要がある場合send()は、適切な文字値を含む文字列を送信できます。たとえば、control-C を送信するには、次のようにします。

    id.send('\003')

また:

    id.send(chr(3))

コメント #2 への応答:

申し訳ありませんが、モジュール名をタイプミスしました - 修正しました。さらに重要なことは、SourceForge にある最新のドキュメントではなく、noah.org にある古いドキュメントを見ていたことです。新しいドキュメントにはsendcontrol()メソッドが示されています。これは、文字 (たとえば、sendcontrol('c')control-C を送信する) または文字に対応しない制御文字を表すさまざまな句読点文字のいずれかである引数を取ります。しかし、実際にはメソッドsendcontrol()の便利なラッパーにすぎません。これは、送信する実際の値を計算した後に呼び出すものです。このファイルの 973 行目でソースを読むことができます。send()sendcontrol()

特に、作成されたftpプログラムid.sendline('')にユーザー名を送信するために機能するように見えることを考えると、なぜ機能しないのかわかりません。代わりに使用したい場合は、次のいずれかになります。sendcontrol()

    id.sendcontrol('j')

改行文字 (control-j、または 10 進数の 10) を送信するには、または:

    id.sendcontrol('m')

キャリッジ リターン (control-m、または 10 進数の 13) を送信します。

それらがうまくいかない場合は、何が起こるのか、それがあなたが望んでいた、または期待していたものとどのように違うのかを正確に説明してください.

于 2012-07-02T19:08:16.127 に答える