Python 如果命令的输出缺少特定字符串,则发出警报

Python 如果命令的输出缺少特定字符串,则发出警报,python,perl,bash,shell,Python,Perl,Bash,Shell,使用bash-script/python/perl-script,是否可以显示没有字符串的命令输出,例如 curl -i http://www.google.com HTTP/1.1 302 Found Location: http://www.google.com.hk/ Cache-Control: private Content-Type: text/html; charset=UTF-8 我想做的是: 如果输出包含302,则不打印任何内容 否则,将丢失打印302 找到$grep-q

使用
bash-script/python/perl-script
,是否可以显示没有字符串的命令输出,例如

curl -i http://www.google.com


HTTP/1.1 302 Found
Location: http://www.google.com.hk/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
我想做的是:

  • 如果输出包含302,则不打印任何内容
  • 否则,将丢失打印
    302
  • 找到$grep-q302http/1.1302
    >地点:http://www.google.com.hk/
    >缓存控制:专用
    >内容类型:text/html;字符集=UTF-8
    >EOF
    $grep-q302http/1.1312已找到
    >地点:http://www.google.com.hk/
    >缓存控制:专用
    >内容类型:text/html;字符集=UTF-8
    >EOF
    302被遗漏了
    
    $grep-q302http/1.1302已找到
    >地点:http://www.google.com.hk/
    >缓存控制:专用
    >内容类型:text/html;字符集=UTF-8
    >EOF
    $grep-q302http/1.1312已找到
    >地点:http://www.google.com.hk/
    >缓存控制:专用
    >内容类型:text/html;字符集=UTF-8
    >EOF
    302被遗漏了
    
    您是指以下内容吗:

    if [ ! `echo 302 | grep 302` ] ; then echo 302 is missed; fi
    
    您可以使用任何适当的命令替换echo 302

    相当于:

    echo 302 | grep 302 > /dev/null || echo "302 is missed"
    

    你的意思是像下面这样的东西吗

    if [ ! `echo 302 | grep 302` ] ; then echo 302 is missed; fi
    
    您可以使用任何适当的命令替换echo 302

    相当于:

    echo 302 | grep 302 > /dev/null || echo "302 is missed"
    

    您可以将
    curl | grep
    silented的结果用作测试:

    if ! `curl -i -s http://www.google.com|grep -q 302` ; then echo "302 is missed" ; fi
    

    您可以将
    curl | grep
    silented的结果用作测试:

    if ! `curl -i -s http://www.google.com|grep -q 302` ; then echo "302 is missed" ; fi
    

    您可以告诉
    curl
    仅输出http代码,如果您只感兴趣的话

    例如:

    $ curl -Is -w %{http_code} -o /dev/null http://stackoverflow.com
    200
    
    上面使用的卷曲选项包括:

    • -I
      :仅获取HTTP头
    • -s
      :无提示。不要表现出进步 仪表或错误信息
    • -w
      :写什么。在这种情况下,只有 http_代码
    • -o
      :将输出发送到何处
    因此,您可以将其添加到条件中,如下所示:

    [[ $(curl -Is -w %{http_code} -o /dev/null http://stackoverflow.com) -ne 302 ]] && echo "302 is missed"
    

    您可以告诉
    curl
    仅输出http代码,如果您只感兴趣的话

    例如:

    $ curl -Is -w %{http_code} -o /dev/null http://stackoverflow.com
    200
    
    上面使用的卷曲选项包括:

    • -I
      :仅获取HTTP头
    • -s
      :无提示。不要表现出进步 仪表或错误信息
    • -w
      :写什么。在这种情况下,只有 http_代码
    • -o
      :将输出发送到何处
    因此,您可以将其添加到条件中,如下所示:

    [[ $(curl -Is -w %{http_code} -o /dev/null http://stackoverflow.com) -ne 302 ]] && echo "302 is missed"
    

    我认为这会起到作用,尽管总是先测试

    perl -e '$pat = shift; print "$pat is missed\n" unless qx{@ARGV} =~ /\Q$pat\E/' 302 curl -i http://www.google.com
    

    我认为这会起到作用,尽管总是先测试

    perl -e '$pat = shift; print "$pat is missed\n" unless qx{@ARGV} =~ /\Q$pat\E/' 302 curl -i http://www.google.com
    

    可能希望
    head-n1
    避免在响应中的其他位置拾取“302”可能希望
    head-n1
    避免在响应中的其他位置拾取“302”这正是我需要的。这正是我需要的。谢谢