からPythonスクリプトは、次のコマンドを実行します:は、シェルコマンドの結果を管理するPythonスクリプト
return_code = call("iw wlan0 scan | sed -e 's#(on wlan# (on wlan#g' | awk -f scan.awk > scan.txt", shell=True)
私はコマンドがうまくいけ場合にのみ、私のコードで進行します。しかし、コマンドが失敗した場合でもreturn_codeは常に "0"です。
はより正確に故障がどのように私はこのメッセージを「捕獲」し、プログラムが継続することを避けることができ
command failed: Device or resource busy (-16)
で表されますか? 「コマンドが失敗しました」というエラーが表示された場合は、シェルコマンドを繰り返し実行しますが、その方法はわかりません。
import subprocess
cmd = "iw wlan0 scan | sed -e 's#(on wlan# (on wlan#g' | awk -f scan.awk > scan.txt"
cmd_err = "command failed: Device or resource busy"
output = cmd_err
while cmd_err in output:
# maybe add a delay and a "max no. of retries" counter
output = subprocess.check_output(cmd, shell=True)
# success - rest of your code
私はそれを使用して、特定のセキュリティリスク(コード/コマンド・インジェクション)が付属していることを言及せずshell=True
を書き込むことはできません。
https://docs.python.org/2/library/subprocess.html #subprocess.check_output – BlackBear
Check_call()とcheck_output()は私の問題を解決しません。コマンド自体の実行は常に成功し、戻りコードは「0」です。問題は、 "iw wlan0 scan"がコマンドの失敗メッセージを返すことができるということです。スクリプトに問題があると思われます。なぜなら、うまくいきませんでした。 –
'check_output 'を使用すると、エラーメッセージにエラーメッセージが含まれているかどうかを確認できます。 – BlackBear