3

GSMモデムを使用してpythonでメッセージを送受信するコードを書いています。

新しいメッセージが受信されるたびに、シリアル ポート オブジェクトから読み取った後、リスト x に次の応答が返されます。

+CMTI: "SM",0 # Message notification with index

私はこの兆候をポーリングしており、リスト内包表記を使用して上記の応答を受け取ったかどうかを確認しました

def poll(x):
    regex=re.compile("\+CMTI:.......")
    [m for l in x for m in [regex.search(l)] if m]

これは機能しているようですが、一致するものが見つかったときはいつでも print ステートメントを追加したいと思います

print "You have received a new message!"

printステートメントを上記とどのように組み合わせることができますか?

4

1 に答える 1

3

通常のforループでは、次のように実行できます。

def poll(x):
    regex = re.compile("\+CMTI:.......")
    lst = []
    for l in x:
        for m in [regex.search(l)]:
            if m:
                lst.append(m)
                print "You have received a new message!"

このリストはどこにも (関数スコープの外に) 保存されていないことに注意してください。おそらく保存したいでしょうreturn


補足として、ハッキーな解決策:

from __future__ import print_function
def poll(x):
    regex = re.compile("\+CMTI:.......")
    [(m, print("You have received a new message!"))[0] for l in x for m in [regex.search(l)] if m]

しかし、これは非常に不自然です- 代わりに他のバージョンを使用してください。

于 2013-03-28T09:02:27.350 に答える