2017-12-08 25 views
1

次のコードを無限に実行したいです。 しかし、2つのデバイスが接続されている場合、無限ループは2番目のスキャンセクションでフリーズします(2番目のスキャンセクションは、無限ループが2回目に開始し、スキャンコマンドが実行されることを意味します)。この問題がなぜ発生するのでしょうか?またルアのio.popen関数の無限ループ

while true do 
print("Hi") 
s = io.popen("iw wlan0 scan") 
s:close() 
print("Done") 

dis = io.popen("iw wlan0 disconnect") 
dis:close() 

c = io.popen("iw wlan0 connect Name") 
c:close() 
print("Goes to Scan") 
end 

、私は手でコマンドラインでコマンドを入力した場合(スキャン - >切断 - >接続 - >スキャン)、次いでスキャン印刷結果が第二走査で自動的に5〜6回の反復です。 (スキャンコマンドを実行すると、印刷結果はSYNC - SCANの終わり、20MHzのチャンネル32に復元、Total BSS [02] bImprovedScan ............. bImprovedScan、SCAN_PENDINGの再開... ............そしてこの印刷されたテキストは5から6回繰り返されます)。この状況はこの問題に関連していますか?

+0

"第二走査部" とは何ですか?印刷された出力は何ですか?停止したらどういう意味ですか?それは凍結するか、エラーや何で中断しますか? – Piglet

+0

スキャンコマンド実行時の印刷出力です。 SYNC - SCANの終わり、20MHzのチャンネル32に復元、合計BSS [02]。 – darren

+0

停止とは凍結を意味します。第2の走査区間は、無限ループが2回目に始まり、走査コマンドが実行されることを意味する。 – darren

答えて

3

私はiwコマンドが何をするのか分かりませんが、パイプを使って何も読み込まずにパイプを開いてすぐに開くと、プログラムが実行されない可能性があります。

私はos.execute代わりのio.popenを使用することをお勧め:

while true do 
    print("Hi") 
    os.execute("iw wlan0 scan; iw wlan0 disconnect; iw wlan0 connect Name") 
    print("Goes to Scan") 
end 
+0

初心者に限りCtrl + Cで割り込みを与えていただきありがとうございます。この問題について教えていただけますか? – darren

+0

これは完璧に動作します!ありがとう! – darren

+0

's:close()'は実際に何をしていますか?実行中のプロセスを終了しますか? –

関連する問題