Проблема с pkg позади большого прокси

Вы нашли команду сами, просто необходимо проанализировать ее. Например:

$ xrandr -q | grep -Po 'current\s*\d+\s*x\s*\d+' | awk '{print $1/$3}'

Регулярное выражение ищет current, затем 0 или больше пробельных символов (\s*), затем одна или несколько цифр (\d+) сопровождаемый \s*, затем x, затем \s* и наконец больше цифр. \K просто отбрасывания что-либо, что было подобрано до той точки:

$ xrandr -q | grep -Po 'current\s*\K\d+\s*x\s*\d+'
1680 x 1050

Так, Вы передаете это gawk который разделит на поля на пробеле и распечатает результат второго поля, разделенного на четвертое.


Лучший путь состоит в том, чтобы получить список от Википедии и просто вставить его в текстовый файл (удостоверьтесь, что вкладки между полями копируются правильно):

$ cat resolutions.txt
VGA 4:3 640 480 00.02   n/a
SVGA    4:3 800 600 00.17   01.03
WSVGA   ~17:10  1024    600 00.31   02.25
XGA 4:3 1024    768 05.53   18.69
XGA+    4:3 1152    864 00.87   01.55
WXGA    16:9    1280    720 01.51   01.54
WXGA    5:3 1280    768 n/a 01.54
WXGA    16:10   1280    800 04.25   12.97
SXGA– (UVGA)    4:3 1280    960 00.72   00.72
SXGA    5:4 1280    1024    10.66   07.49
HD  ~16:9   1360    768 02.36   02.28
HD  ~16:9   1366    768 17.19   19.14
SXGA+   4:3 1400    1050    00.18   n/a
WXGA+   16:10   1440    900 07.60   06.61
HD+ 16:9    1600    900 06.82   03.82
UXGA    4:3 1600    1200    00.53   n/a
WSXGA+  16:10   1680    1050    10.26   03.66
FHD 16:9    1920    1080    25.04   05.09
WUXGA   16:10   1920    1200    03.65   01.11
QWXGA   16:9    2048    1152    00.13   n/a
WQHD    16:9    2560    1440    00.72   00.36
WQXGA   16:10   2560    1600    00.19   n/a
    3:4 768 1024    n/a 01.93
    16:9    1093    614 n/a 00.63
    ~16:9   1311    737 n/a 00.35
Other               01.29   07.25

Теперь, используйте тот файл для получения значения, в котором Вы нуждаетесь:

$ grep -Po 'current\s*\K\d+\s*x\s*\d+' a | sed 's/ *x */ /' | 
    while read x y; do 
     grep "$x" resolutions.txt | grep "$y" | awk -F"\t" '{print $2}'; 
  done 
16:10

Наконец, превратите это в небольшой сценарий:

#!/usr/bin/env bash

## The location of the file with the resolutions
RESOLUTIONS="$HOME/resolutions.txt" 

xrandr -q | grep -Po 'current\s*\K\d+\s*x\s*\d+' | sed 's/ *x */ /' | 
while read x y; do 
    grep "$x" "$RESOLUTIONS" | grep "$y" | awk -F"\t" '{print $2}'; 
done 

Сохраните сценарий где-нибудь в Вашем $PATH и затем выполните его для получения разрешения:

$ get_resolution.sh
16:10

2
26.04.2015, 10:45
1 ответ

Последние расстройства по этому вопросу:

  • Подано в качестве отчета об ошибках для FreeBSD Bug198772
  • , представленных в заломенном списке FreeBSD-PKG и получила подтверждение, что PKG 1.4 не может обрабатывать колонным ответам
  • Патч предложил, что может быть интегрирован в предстоящий 1.5 PKG Release
  • (по состоянию на 2015-04-25), я могу подтвердить, что патч был интегрирован в 1,5 выпуске, и что этот выпуск в настоящее время используется на FreeBSD 10.1: проблема решено.

Не совсем настоящий ответ, но он может помочь кому-либо лицом к той же проблемы. Вот код Python для минимального прокси, сопоставляющего весь файл, полученный в оборудованном режиме, и отдавая его обратно с заголовками длины содержимого:

# -*- coding: latin1 -*-

import urllib.request
import http.server
import logging

class Handler(http.server.BaseHTTPRequestHandler):
    HEADERS = [ 'If-Modified-Since', 'Host', 'User-Agent', 'Accept',
                'Connection' ]
    def do_GET(self):
        logging.debug("Got a request %s", self.path)
        if self.server.debug >= 3:
            logging.debug("Original headers %s", self.headers.as_string())
        req = urllib.request.Request(self.path)
        for (key, value) in self.headers.items():
            if key in __class__.HEADERS:
                req.add_header(key, value)
        if self.server.debug >= 4:
            logging.debug("Send headers %s", str(req.headers))                
        r = self.server.opener.open(req)
        code = r.getcode()
        logging.debug('Code %d', code)
        if self.server.debug >= 3:
            logging.debug("Received headers %s", str(r.headers))
        if code == 200 and self.server.chunk:
            self.send_response(code)
            self.send_header('Transfer-Encoding', 'chunked')
            self.end_headers()
            while True:
                t = r.read(4095)
                logging.debug('Chunk : %d', len(t))
                self.wfile.write(("%03x\r\n" % (len(t),)).encode())
                if len(t) == 0:
                    self.wfile.write(b"\r\n")
                    break
                else:
                    self.wfile.write(t)
                    self.wfile.write(b"\r\n")
        else:
            t = r.readall()
            #print(t)
            self.send_response(code)
            logging.debug('Content-Length %d', len(t))
            self.send_header('Content-Length', len(t))
            self.end_headers()
            self.wfile.write(t)

class MiniProxy(http.server.HTTPServer):
    def __init__(self, port=8080, relay=None, chunk=False, debug=0):
        http.server.HTTPServer.__init__(self, ('', port), Handler)
        self.port = port
        self.relay = relay
        self.chunk = chunk
        self.debug= debug
        if relay is not None:
            logging.info("relay set to", relay)
            self.proxyHandler = urllib.request.ProxyHandler(
                {'http': relay})
            self.opener = urllib.request.build_opener(self.proxyHandler)
        else:
            self.opener = urllib.request.build_opener()

if __name__ == '__main__':
    import sys
    import argparse
    parser = argparse.ArgumentParser(description =
                      "Simple HTTP proxy to chunk or unchunk responses")
    parser.add_argument('-c', '--chunk', dest = 'chunk', action='store_true')
    parser.add_argument('-C', '--no-chunk', dest = 'chunk', action='store_false')
    parser.add_argument('-r', '--relay')
    parser.add_argument('-p', '--port', type=int,  default = 8080)
    parser.add_argument('-d', '--debug', type=int, default = 0)
    params = parser.parse_args()
    proxy = MiniProxy(port = params.port, relay = params.relay,
                      chunk = params.chunk, debug = params.debug)

    logging_format = '%(levelname)s:%(message)s'
    if params.debug == 1:
        logging.basicConfig(format=logging_format, level=logging.INFO)
    elif params.debug >= 2:
        logging.basicConfig(format=logging_format, level=logging.DEBUG)
    else:
        logging.basicConfig(format=logging_format)        
    try:
        print (sys.argv[0], "listen on", proxy.port)
        proxy.serve_forever()
    except KeyboardInterrupt:
        print('Stop')
        #proxy.shutdown()
3
27.01.2020, 22:05

Теги

Похожие вопросы