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&#34 ;.
更确切地说,失败由
表示command failed: Device or resource busy (-16)
我怎样才能捕获"这条消息并避免程序继续?如果"命令失败"错误,我想重复shell命令,但我不知道该怎么做。
答案 0 :(得分:0)
你可以这样做:
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
而不提及使用它带来了某些安全风险(代码/命令注入)。尽可能避免使用它,永远不要将它用于不受信任的输入。
答案 1 :(得分:0)
这取决于您希望得到结果的命令部分。你应该得到的是(我认为 - 现在自己学习这些东西)" awk -f scan.awk>的返回代码。 scan.txt&#34 ;.
我怀疑你真正想要的是根据" iw wlan0 scan"的结果继续使用sed / awk组件,所以将它分成2个部分来进行扫描,检查结果,如果返回码为0 /输出不是"命令失败,则继续:设备或资源忙"。
我喜欢提供一个语法和程序上完美的例子来说明如何做到这一点,但我也只是学习:)