[{"title": "tornado\u5b9e\u73b0404\u8df3\u8f6c\u81ea\u5df1\u7684\u9875\u9762", "desc": "Tornado\u672a\u5b9a\u4e49\u7684\u8def\u7531\u8df3\u8f6c\u9ed8\u8ba4\u7684404\u9875\u9762\u5e26\u6709\u8def\u5f84\uff0c\u4e1a\u52a1\u4ee3\u7801\u7b49\u4fe1\u606f\u4e0d\u53cb\u597d\uff0c\u53ef\u4ee5\u91c7\u7528\u4ee5\u4e0b\u65b9\u6cd5\u81ea\u5b9a\u4e49404\u9875\u9762\u7b49\u62a5\u9519\u9875\u9762\u3002", "content": "

1.\u6ca1\u81ea\u5b9a\u4e49\u4e4b\u524d

2.\u66f4\u6539\u8fc7\u6548\u679c
3.\u5177\u4f53\u89e3\u51b3\u529e\u6cd5
1.\u5199\u4e00\u4e2a\u65b9\u6cd5errHandler.py\u5185\u5bb9\u5982\u4e0b
from tornado.web import RequestHandler
class BaseHandler(RequestHandler):
def write_error(self, status_code, **kwargs):
if status_code == 404:
self.render('404.html')
elif status_code == 500:
self.render('500.html')
else:
self.write('error:' + str(status_code))
def get(self):
self.write_error(404)

2.\u5728\u8def\u7531\u6587\u4ef6urls.py\u4e0b\u9762\u6dfb\u52a0[(r\".*\", BaseHandler)]

urlpatterns += [(r\".*\", BaseHandler)]

3.\u91cd\u542f\u9879\u76ee


"}, {"title": "windows2003\u5b89\u88c5pyinstaller", "desc": "\u5728\u672c\u5730\u7535\u8111\u5199\u4e86\u4e2a\u5c0f\u7a0b\u5e8f\u6253\u5305\u6210exe\u5230\u670d\u52a1\u5668\u4e0a\u4e0d\u80fd\u7528\uff0c\u67e5\u4e86\u4e0b\u670d\u52a1\u5668\u64cd\u4f5c\u7cfb\u7edfWindows server2003.\u53ea\u652f\u6301python3.4\uff0c\u5728pyton34\u7248\u672c\u4e2d\u76f4\u63a5 python -m pip install --upgrade pip \u4f1a\u5bfc\u81f4pip\u5347\u7ea7\u5931\u8d25\u4e0d\u80fd\u4f7f\u7528\uff0c\u624b\u5de5\u5b89\u88c5\u4e86\u4e0b\u4f9d\u8d56\u3002\u5b89\u88c5\u8fc7\u7a0b\u4e2d\u5982\u679c\u4e0d\u5c0f\u5fc3\u5bfc\u81f4pip\u4e0d\u80fd\u4f7f\u7528\uff0c\u76f4\u63a5\u5378\u8f7d\u91cd\u65b0\u5b89\u88c5python\uff0c\u4e0d\u8981\u6298\u817e\uff0c\u6211\u5c31\u6d6a\u8d39\u4e86\u5f88\u591a\u65f6\u95f4\u3002", "content": "

1.\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c

2.\u5b98\u7f51\u4e0b\u8f7dpython3.4\uff0c\u4e3a\u4e86\u517c\u5bb932\u7684\uff0c\u4e0b\u8f7d32\u4f4d\u7684 python-3.4.4.msi \u76f4\u63a5\u5b89\u88c5

3.\u5b89\u88c5typing

C:\\Documents and Settings\\Administrator>pip install typing

Collecting typing

  Downloading https://files.pythonhosted.org/packages/f2/5d/865e17349564eb177268

8d8afc5e3081a5964c640d64d1d2880ebaed002d/typing-3.10.0.0-py3-none-any.whl

Installing collected packages: typing

Successfully installed typing-3.10.0.0

You are using pip version 7.1.2, however version 21.2.1 is available.

You should consider upgrading via the 'python -m pip install --upgrade pip' comm

and.

4.\u5b89\u88c5wheel

C:\\Documents and Settings\\Administrator>pip install wheel==0.33.6

Collecting wheel==0.33.6

  Downloading https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a4561

0eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.whl

Installing collected packages: wheel

Successfully installed wheel-0.33.6

You are using pip version 7.1.2, however version 21.2.1 is available.

You should consider upgrading via the 'python -m pip install --upgrade pip' comm

and.

5.\u5b89\u88c5setuptools

C:\\Documents and Settings\\Administrator>pip install setuptools==42.0.2

Collecting setuptools==42.0.2

6.\u5347\u7ea7pip\u523019.1.1\uff0c\u4e3b\u8981\u662f\u4e3a\u4e86\u5b89\u88c5pywin32,\u4e0d\u8981\u5347\u7ea7\u592a\u9ad8\uff0c\u4e0d\u7136\u540e\u9762\u62a5\u9519\u592a\u96be\u5904\u7406\u3002

C:\\Documents and Settings\\Administrator>python -m pip install --upgrade pip==19.1.1

Collecting pip==19.1.1

  Using cached https://files.pythonhosted.org/packages/5c/e0/be401c003291b56efc5

5aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl

Installing collected packages: pip

  Found existing installation: pip 7.1.2

    Uninstalling pip-7.1.2:

      Successfully uninstalled pip-7.1.2

Successfully installed pip-19.1.1

7.\u5b89\u88c5pywin32


7.1\u4ecehttps://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32 \u4e0b\u8f7d\u6587\u4ef6pywin32-224-cp34-cp34m-win32.whl

7.2\u7528pip\u5b89\u88c5whl\u6587\u4ef6\uff08\u6211\u8fd9\u91ccpywin32-224-cp34-cp34m-win32.whl \u653e\u5728D\u76d8\uff0c\u6267\u884c\u8def\u5f84\u8981\u5207\u6362\u5230whl\u6587\u4ef6\u6240\u5728\u7684\u76ee\u5f55\uff09

D:\\>pip install pywin32-224-cp34-cp34m-win32.whl

DEPRECATION: Python 3.4 support has been deprecated. pip 19.1 will be the last o

ne supporting it. Please upgrade your Python as Python 3.4 won't be maintained a

fter March 2019 (cf PEP 429).

Processing d:\\pywin32-224-cp34-cp34m-win32.whl

Installing collected packages: pywin32

Successfully installed pywin32-224

8.\u5b89\u88c5future

D:\\>pip install future==0.18.2

DEPRECATION: Python 3.4 support has been deprecated. pip 19.1 will be the last o

ne supporting it. Please upgrade your Python as Python 3.4 won't be maintained a

fter March 2019 (cf PEP 429).

Collecting future==0.18.2

  Downloading https://files.pythonhosted.org/packages/45/0b/38b06fd9b92dc2b68d58

b75f900e97884c45bedd2ff83203d933cf5851c9/future-0.18.2.tar.gz (829kB)

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c                | 399kB 99kB/s eta 0:00:05

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588                | 409kB 99kB/s eta 0:00:05

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588                | 419kB 99kB/s eta 0:00:05

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c               | 430kB 99kB/s eta 0:00:0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588               | 440kB 99kB/s eta 0:00:0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c              | 450kB 99kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588              | 460kB 99kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588              | 471kB 99kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c             | 481kB 99kB/s eta 0:00

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588             | 491kB 99kB/s eta 0:00

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c            | 501kB 156kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588            | 512kB 156kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588            | 522kB 156kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c           | 532kB 156kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588           | 542kB 65kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c          | 552kB 65kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588          | 563kB 65kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588          | 573kB 65kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c         | 583kB 65kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588         | 593kB 65kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588         | 604kB 65kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588        | 614kB 65kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588        | 624kB 65kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c       | 634kB 65kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588       | 645kB 65kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588       | 655kB 65kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588      | 665kB 78kB/s e

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588      | 675kB 78kB/s e

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c     | 686kB 78kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588     | 696kB 78kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588     | 706kB 78kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c    | 716kB 78kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588    | 727kB 78kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c   | 737kB 52kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588   | 747kB 52kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588   | 757kB 52kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c  | 768kB 52kB

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588  | 778kB 52kB

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c | 788kB 52k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 | 798kB 52k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 | 808kB 52k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c| 819kB 52

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 829kB 52

kB/s

Building wheels for collected packages: future

  Building wheel for future (setup.py) ... done

  Stored in directory: C:\\Documents and Settings\\Administrator\\Local Settings\\Ap

plication Data\\pip\\Cache\\wheels\\8b\\99\\a0\\81daf51dcd359a9377b110a8a886b3895921802

d2fc1b2397e

Successfully built future

Installing collected packages: future

Successfully installed future-0.18.2


9.\u6700\u540e\u5b8c\u6210\u5b89\u88c5pyinstaller-3.2.1

D:\\>pip install pyinstaller==3.2.1

DEPRECATION: Python 3.4 support has been deprecated. pip 19.1 will be the last o

ne supporting it. Please upgrade your Python as Python 3.4 won't be maintained a

fter March 2019 (cf PEP 429).

Collecting pyinstaller==3.2.1

  Downloading https://files.pythonhosted.org/packages/3f/d2/3515242cc5cfed127065

06d17728a7ee0b8cf33840e250357fd793a94607/PyInstaller-3.2.1.tar.bz2 (2.4MB)

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c                | 1.2MB 91kB/s eta 0:00:14

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c                | 1.2MB 91kB/s eta 0:00:14

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588                | 1.2MB 91kB/s eta 0:00:14

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588                | 1.2MB 91kB/s eta 0:00:14

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588                | 1.2MB 91kB/s eta 0:00:14

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588                | 1.2MB 91kB/s eta 0:00:14

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588                | 1.2MB 91kB/s eta 0:00:14

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c               | 1.2MB 121kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c               | 1.3MB 121kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c               | 1.3MB 121kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588               | 1.3MB 121kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588               | 1.3MB 121kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588               | 1.3MB 121kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588               | 1.3MB 121kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588               | 1.3MB 121kB/s eta 0:00:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c              | 1.3MB 121kB/s eta 0:00

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c              | 1.3MB 121kB/s eta 0:00

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588              | 1.4MB 121kB/s eta 0:00

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588              | 1.4MB 121kB/s eta 0:00

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588              | 1.4MB 121kB/s eta 0:00

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588              | 1.4MB 121kB/s eta 0:00

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588              | 1.4MB 121kB/s eta 0:00

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c             | 1.4MB 121kB/s eta 0:0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c             | 1.4MB 121kB/s eta 0:0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c             | 1.4MB 121kB/s eta 0:0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588             | 1.4MB 121kB/s eta 0:0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588             | 1.4MB 121kB/s eta 0:0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588             | 1.5MB 121kB/s eta 0:0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588             | 1.5MB 192kB/s eta 0:0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588             | 1.5MB 192kB/s eta 0:0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c            | 1.5MB 192kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c            | 1.5MB 192kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588            | 1.5MB 192kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588            | 1.5MB 192kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588            | 1.5MB 192kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588            | 1.5MB 192kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588            | 1.5MB 192kB/s eta 0:

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c           | 1.6MB 192kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c           | 1.6MB 192kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588           | 1.6MB 192kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588           | 1.6MB 192kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588           | 1.6MB 192kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588           | 1.6MB 192kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588           | 1.6MB 192kB/s eta 0

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c          | 1.6MB 192kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c          | 1.6MB 192kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c          | 1.6MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588          | 1.7MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588          | 1.7MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588          | 1.7MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588          | 1.7MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588          | 1.7MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c         | 1.7MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c         | 1.7MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588         | 1.7MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588         | 1.7MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588         | 1.8MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588         | 1.8MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588         | 1.8MB 152kB/s eta

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c        | 1.8MB 152kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c        | 1.8MB 152kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c        | 1.8MB 152kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588        | 1.8MB 152kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588        | 1.8MB 152kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588        | 1.8MB 145kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588        | 1.8MB 145kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588        | 1.9MB 145kB/s et

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c       | 1.9MB 145kB/s e

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c       | 1.9MB 145kB/s e

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588       | 1.9MB 145kB/s e

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588       | 1.9MB 145kB/s e

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588       | 1.9MB 145kB/s e

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588       | 1.9MB 145kB/s e

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588       | 1.9MB 145kB/s e

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c      | 1.9MB 145kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c      | 1.9MB 145kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c      | 2.0MB 145kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588      | 2.0MB 145kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588      | 2.0MB 145kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588      | 2.0MB 131kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588      | 2.0MB 131kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588      | 2.0MB 131kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c     | 2.0MB 131kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c     | 2.0MB 131kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588     | 2.0MB 131kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588     | 2.0MB 131kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588     | 2.1MB 131kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588     | 2.1MB 131kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588     | 2.1MB 131kB/s

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c    | 2.1MB 131kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c    | 2.1MB 131kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c    | 2.1MB 131kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588    | 2.1MB 131kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588    | 2.1MB 131kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588    | 2.1MB 131kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588    | 2.2MB 131kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588    | 2.2MB 131kB/

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c   | 2.2MB 131kB

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c   | 2.2MB 131kB

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588   | 2.2MB 131kB

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588   | 2.2MB 177kB

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588   | 2.2MB 177kB

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588   | 2.2MB 177kB

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588   | 2.2MB 177kB

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c  | 2.2MB 177k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c  | 2.3MB 177k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c  | 2.3MB 177k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588  | 2.3MB 177k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588  | 2.3MB 177k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588  | 2.3MB 177k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588  | 2.3MB 177k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588  | 2.3MB 177k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c | 2.3MB 84k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c | 2.3MB 84k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 | 2.3MB 84k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 | 2.4MB 84k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 | 2.4MB 84k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 | 2.4MB 84k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 | 2.4MB 84k

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c| 2.4MB 84

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c| 2.4MB 84

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 2.4MB 84

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 2.4MB 84

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 2.4MB 84

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 2.4MB 84

kB/s

Requirement already satisfied: setuptools in d:\\python32\\lib\\site-packages (from

 pyinstaller==3.2.1) (42.0.2)

Requirement already satisfied: future in d:\\python32\\lib\\site-packages (from pyi

nstaller==3.2.1) (0.18.2)

Building wheels for collected packages: pyinstaller

  Building wheel for pyinstaller (setup.py) ... done

  Stored in directory: C:\\Documents and Settings\\Administrator\\Local Settings\\Ap

plication Data\\pip\\Cache\\wheels\\de\\6f\\41\\ba18c0eaf3b6862d78c6bd50ca2679395c136fb

9e087d21cf9

Successfully built pyinstaller

Installing collected packages: pyinstaller

Successfully installed pyinstaller-3.2.1


10.\u5b89\u88c5\u66f4\u9ad8\u7248\u672c\u7684pyinstaller.

(1)\u5b89\u88c5pyinstaller3.3\u6216\u80053.3.1\u7248\u672c

\u9664\u4e86\u4e0a\u9762\u7684,\u8fd8\u8981\u5148\u5b89\u88c5

altgraph-0.17

macholib-1.14

pefile-2019.4.18

(2)\u5b89\u88c5pyinstaller3.4\u62163.5\u7248\u672c

\u9664\u4e86\u4e0a\u9762\u7684,\u8fd8\u8981\u5148\u5b89\u88c5

pywin32-ctypes-0.2.0

"}, {"title": "peewee\u4e2dlike,in\u7684SQL\u67e5\u8be2\u5907\u5fd8", "desc": "peewee\u662fpython\u7684ORM\u6846\u67b6\uff0c\u7528\u4e86\u8fd9\u4e2a\u6709\u624b\u52a8\u5199\u6570\u636e\u5e93\u8fde\u63a5\u3001\u6253\u5f00\u3001\u5173\u95ed\u548csql\u8bed\u53e5\u7b49\u597d\u5904\u3002", "content": "

where\u5b57\u53e5in \u7684\u4f7f\u7528

query = Category.select().where(Category.id << [3, 4, 5, 6])

\u76f8\u5f53\u4e8e

select * from category where id in (3, 4, 5, 6)


where\u5b57\u53e5in \u7684\u4f7f\u7528 like\u7684\u4f7f\u7528

          query = CONTENT.select(CONTENT.category,CONTENT.display,CONTENT.content,CONTENT.desc,CONTENT.add_time,CONTENT.title,

                                   CHANNEL.name,CHANNEL.id,CONTENT.id

                                   ).join(CHANNEL).where(CONTENT.display ==1 and CONTENT.title.contains(title)).order_by(CONTENT.add_time.desc())

\u76f8\u5f53\u4e8e

SELECT

\tc.title,

\tc.id,

\tc.`desc`,

\tc.display,

\tc.category_id,

\tc.add_time,

\tc.content,

\tl.`name`,

\tl.id

FROM

\tcontent AS c

INNER JOIN channel AS l ON c.category_id = l.id

WHERE

\tc.display = 1

AND c.title LIKE '%\u6dee\u5b89%'

ORDER BY

\tc.add_time DESC



"}, {"title": "\u4f7f\u7528eval\u5c06\u63a5\u53e3\u4f20\u8fc7\u6765\u7684str\u8f6c\u6362\u4e3alist", "desc": "\u670d\u52a1\u5668\u4e0a\u653e\u7f6e\u5c0f\u7a0b\u5e8f\u83b7\u53d6\u5f53\u524d\u8def\u5f84\u4e0b\u7684\u76ee\u5f55\uff0c\u5728\u672c\u5730\u8c03\u7528\u670d\u52a1\u5668\u63a5\u53e3\uff0c\u56e0\u4e3a\u63a5\u53e3\u4e4b\u95f4\u4f20\u8f93\u53ea\u80fd\u4f20\u8f93\u5b57\u7b26\u4e32\uff0c\u5b57\u7b26\u4e32\u4e0d\u4fbf\u4e8e\u904d\u5386\uff0c\u5230\u5ba2\u6237\u7aef\u53ef\u4ee5\u4f7f\u7528 eval(dirlist) \u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u5217\u8868\u3002\u8fd9\u4e2a\u65b9\u6cd5\u662f\u6211\u76ee\u524d\u53d1\u73b0\u6700\u4f18\u96c5\u7684\u65b9\u6848\u4e0d\u7528\u5904\u7406\u5b57\u7b26\u4e32\u3002", "content": "

\u670d\u52a1\u5668\u7aef\u83b7\u53d6\u5f53\u524d\u8def\u5f84\u4e0b\u6587\u4ef6\u76ee\u5f55\u7684\u65b9\u6cd5

class GetPath(RequestHandler):
async def get(self):
res = {}
abs_path = os.path.dirname(os.path.abspath(\"__file__\"))
dirlist = str(os.listdir(abs_path))
res = {
'dirlist':dirlist
}
self.finish(json.dumps(res))

\u5ba2\u6237\u7aef\u8c03\u7528\u670d\u52a1\u5668\u63a5\u53e3\u83b7\u53d6\u670d\u52a1\u4e0a\u7684\u6587\u4ef6\u76ee\u5f55

class GetPath(RequestHandler):
async def get(self):
khId= self.get_argument('khId',default=None, strip=True)
rep = requests.get(url=apkpath[khId])
data = json.loads(rep.text)
dirlist = data['dirlist']
dirlist = eval(dirlist)
print(type(dirlist))
print(dirlist)

\u6267\u884c\u7ed3\u679c

D:\\Python36\\python.exe D:/PycharmProjects/zhoudl/server.py

<class 'list'>

['.git', '.idea', 'apps', 'Base', 'build', 'dist', 'server.py', 'server.spec', 'settings.py', 'template', 'u', 'utils', '__pycache__']



"}, {"title": "\u4e1a\u52a1\u7ba1\u7406\u7cfb\u7edf\u5b9e\u73b0\u601d\u8def", "desc": "\u9879\u76ee\u5206\u4e3a\u4e09\u5927\u5757\uff0cVue Antd Admin\u8d1f\u8d23\u6570\u636e\u5c55\u793a\uff0c\u4e24\u4e2apython\u9879\u76ee\u4e00\u4e2a\u8d1f\u8d23\u6587\u4ef6\u4e0a\u4f20\u4e00\u4e2a\u8d1f\u8d23\u63d0\u4f9b\u6570\u636e\u63a5\u53e3\u3002", "content": "

\u529f\u80fd\u67e5\u8be2\u6587\u6863\u548c\u4e0a\u4f20\u6587\u6863\u3002

\u4e00\u3001\u4e0a\u4f20\u6587\u6863\u5148\u9009\u62e9\u6587\u6863\u7c7b\u522b\uff0c\u70b9\u51fb\u4e0a\u4f20\u6309\u94ae\u3002

\u4e8c\u3001\u67e5\u8be2\u6587\u6863\u5148\u9009\u62e9\u6587\u6863\u7c7b\u522b\uff0c\u70b9\u51fb\u67e5\u8be2\u6309\u94ae

\u6574\u4f53\u601d\u8def\uff0c\u70b9\u51fb\u4e0a\u4f20\u6309\u94ae\u8bb0\u5f55\u5ba2\u6237\u5206\u7c7b\uff0c\u6570\u636e\u5e93\u65b0\u589e\u4e00\u6761\u8bb0\u5f55\uff0c\u5e76\u53cd\u9988\u672c\u6761\u8bb0\u5f55\u7684ID\u3002\u70b9\u51fb\u4e0a\u4f20\u6309\u94ae\u540e\u51fa\u73b0\u4e0a\u4f20\u6587\u6863\u7684\u6309\u94ae\uff0c\u4e0a\u4f20\u6210\u529f\u540e\u53cd\u56de\u9884\u89c8\u5730\u5740\u3002\u5e76\u6839\u636e\u7b2c\u4e00\u6b65\u4e0a\u4f20\u8fd4\u56de\u7684ID\u66f4\u65b0\u6587\u6863\u7684\u5b58\u50a8\u5730\u5740\uff0c\u9884\u89c8\u5730\u5740\uff0c\u6587\u4ef6\u540d\uff0c\u4e0a\u4f20\u7684\u7528\u6237\uff0c\u4e0a\u4f20\u65f6\u95f4\u7b49\u4fe1\u606f\uff08\u5982\u679c\u4e0a\u4f20\u7684\u6587\u6863\u4e3aTXT\uff0cjpg\u7b49\u53ef\u4ee5\u76f4\u63a5\u9884\u89c8\u7684\u5730\u5740\u4e0d\u751f\u6210\u9884\u89c8PDF\u6587\u6863\u3002Doc\u548cDocx\u6587\u6863\u751f\u6210PDF\u4f9b\u9884\u89c8\uff09\u3002

\u6587\u6863\u5b58\u50a8\u9884\u89c8\u7684\u6838\u5fc3\u4ee3\u7801\uff1a

from tornado.web import RequestHandler
from datetime import datetime
import uuid
from utils.office_pdf import savePdf
import aiofiles
import json,os
from settings import settings,basepath,sitepath
class Upload(RequestHandler):
async def post(self,*args,**kwargs):
dir = settings[\"MEDIA_ROOT\"]+'/'+ str(datetime.now().strftime(\"%Y%m%d\")) +'/'
try:
filename = self.request.files
filename = filename.get('filename')
filename = filename[0]
filename = filename['body']
filename = filename.decode('utf-8')
body = self.request.files.get('body')[0]['body']
if not os.path.exists(dir):
os.makedirs(dir)
filehz = filename.split(\".\")
filename = filehz[0]
filehz = \".\" + filehz[1]
new_filename = \"{uuid}{filename}\".format(uuid=uuid.uuid1(), filename=filehz)
file_path = dir + new_filename
async with aiofiles.open(file_path, \"wb\") as f:
await f.write(body)
inpath = 'u/'+ str(datetime.now().strftime(\"%Y%m%d\")) + '/'+ new_filename
if filehz =='.doc' or filehz =='.docx' :
filehz='.pdf'
pdf_filename = \"{uuid}{filename}\".format(uuid=uuid.uuid1(), filename=filehz)
doc = basepath + inpath
inpath = basepath + inpath
pdf = sitepath + 'u/'+ str(datetime.now().strftime(\"%Y%m%d\")) + '/'+ pdf_filename
outpath = basepath + 'u/'+ str(datetime.now().strftime(\"%Y%m%d\")) + '/'+ pdf_filename
await savePdf(inpath,outpath)
else:
doc = basepath + inpath
pdf = sitepath + inpath
self.set_status(201)
res={
'filename':filename,
'inpath':doc,
'outpath':pdf
}
self.finish(json.dumps(res))
except Exception as e:
print(e)
self.set_status(500)
self.finish(\"\u63a5\u53e3\u8f6c\u6362\u5f02\u5e38\")

SavePdf \u6838\u5fc3\u4ee3\u7801

async def savePdf(input,output):
wordApp = Dispatch('word.Application')
doc = wordApp.Documents.Open(FileName=input,ReadOnly = True)
# 17\u4e3aPDF,18\u4e3aXPS\u3002\u53c2\u8003https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.word.wdexportformat?view=word-pia
doc.ExportAsFixedFormat(OutputFileName=output, ExportFormat=17)
# print(wordApp.FileConverters[3].CanSave)
# doc.SaveAs2('2.pdf',FileFormat=wordApp.FileConverters[3].SaveFormat)
doc.Close()
wordApp.Quit()

vue\u9875\u9762

<template>
  <a-card>
    <div v-if=\"iupload\">
    <a-upload
      accept=\"doc,docx,png,jpg,jpeg\"
      :headers=\"head\"
      action=\"api/uploadFile\"
      :before-upload=\"beforeImage\"
      @change=\"handleImageSuccess\"
    >
      <a-button> Click to Upload </a-button>
    </a-upload>
    </div>
    <div v-else>
      <div style=\"margin-bottom: 48px\">
        <a-form @submit=\"handleSearch\" :form=\"form\" layout=\"horizontal\">
          <div>
            <a-row>
              <a-col :md=\"11\" :sm=\"24\">
                <a-form-item
                  label=\"\u9009\u62e9\u5ba2\u6237\"
                  :labelCol=\"{ span: 5 }\"
                  :wrapperCol=\"{ span: 18offset: 1 }\"
                >
                  <a-select
                    v-decorator=\"[
                      'select',
                      {
                        initialValue: 15,
                        rules: [
                          { required: truemessage: '\u8bf7\u9009\u62e9\u4e00\u4e2a\u67e5\u8be2\u9009\u9879!' },
                        ],
                      },
                    ]\"
                    :options=\"kehus\"
                  >
                  </a-select>
                </a-form-item>
              </a-col>
            </a-row>
          </div>
          <span style=\"float: right; margin-top: 3px\">
            <a-button type=\"primary\" htmlType=\"submit\">\u67e5\u8be2</a-button>
            <a-button :style=\"{ marginLeft: '8px' }\" @click=\"handleUpload\">\u4e0a\u4f20</a-button>
          </span>
        </a-form>
      </div>
      <div class=\"standard-table\">
        <a-table :columns=\"columns\" :dataSource=\"data\" rowKey=\"id\" bordered>
          <template slot=\"operation\" slot-scope=\"text, record\">
            <div class=\"editable-row-operations\" style=\"margin-right: 8px\">
              <span>
                <a @click=\"() => goRecord(record.outpath)\"
                  ><a-icon type=\"view\" />\u9884\u89c8</a
                >
              </span>
            </div>
          </template>
        </a-table>
      </div>
    </div>
  </a-card>
</template>
<script>
import { getDoc,postDoc,updateDoc } from \"@/services/wenjian\";
import { getTok } from \"@/utils/request\";
import { getKHS } from \"@/services/kehu\"
const columns = [
  {
    title: \"ID\",
    dataIndex: \"id\",
    width: \"7%\",
  },
  {
    title: \"\u5ba2\u6237\u5355\u4f4d\",
    width: \"20%\",
    dataIndex: \"kehu\",
    sort: true
  },
  {
    title: \"\u6587\u4ef6\u540d\",
    width: \"15%\",
    dataIndex: \"filename\",
    sort: true
  },
  {
    title: \"\u9884\u89c8\u5730\u5740\",
    width: \"52%\",
    dataIndex: \"outpath\",  
  },
  {
    title: \"\u64cd\u4f5c\",
    dataIndex: \"operation\",
    scopedSlots: { customRender: \"operation\" },
  },
];
const data = [];
const kehus = [];
getKHS().then(
    (result=> {
    const list = result.data.results;
    for (var i of list) {
      kehus.push({
        title: i.khjg,
        value: i.id,
        key: i.id,
      });
    }
  },
  () => {
    this.$message.info(\"\u540e\u53f0\u63a5\u53e3\u8fde\u63a5\u5f02\u5e38\");
  }
)
getDoc().then(
    (res=> {
    const clist = res.data.results;
    var j = 1
    for (var i of clist) {
      data.push({
        id: j++,
        filename: i.filename,
        kehu: i.khId.khjg,
        outpath: i.outPath
      });
    }
  },
  () => {
    this.$message.info(\"\u540e\u53f0\u63a5\u53e3\u8fde\u63a5\u5f02\u5e38\");
  }
)

export default{
data(){
  return {
    head: { Authorization: getTok() },
    iupload:false,
    data,
    columns,
    kehus:kehus,
    user:'',
    khId:'',
    khjg:'',
    form: this.$form.createForm(this),
  }
},
methods:{
    beforeImage(file) {
      const isJpgOrPng = file.type === 'text/plain' || file.type === 'application/msword' || file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg';
       if (!isJpgOrPng) {
        this.$message.error('\u53ea\u80fd\u4e0a\u4f20doc,docx\u6587\u6863!');
      }
      const isLt4M = file.size / 1024 / 1024 < 4;
      if (!isLt4M) {
        this.$message.error('\u56fe\u7247\u5927\u5c0f\u5fc5\u987b\u5c0f\u4e8e4M!');
      }
      return isLt4M;
    },
    handleImageSuccess(info) {
      if (info.file.status === \"done\") {
        const filename = info.file.response.filename;
        const inpath = info.file.response.inpath;
        const outpath = info.file.response.outpath;
        updateDoc(this.id,filename,inpath,outpath).then(
            (res=> {
                  const code = res.data.code;
                  if (code==201){
                    this.iupload = false;
                    getDoc().then((result=> {
                      this.data.splice(0data.length);
                      const list = result.data.results;
                      var j = 1
                      for (var i of list) {
                        this.data.push({
                        id: j++,
                        filename: i.filename,
                        kehu: i.khId.khjg,
                        outpath: i.outPath
                        });
                      }
                    });
                  }else{
                    this.$message.info(\"\u6587\u4ef6\u4e0a\u4f20\u5931\u8d25\");
                  }
                  
                }
        )
      }
    },
    handleSearch(e) {
      e.preventDefault();
      this.form.validateFields((err=> {
        if (!err) {
          const select = this.form.getFieldValue(\"select\");
            getDoc('khId',select).then((result=> {
              this.data.splice(0data.length);
              const list = result.data.results;
              var j = 1
              for (var i of list) {
                this.data.push({
                id: j++,
                filename: i.filename,
                kehu: i.khId.khjg,
                outpath: i.outPath
                });
              }
            });
        }
      });
    },
    handleUpload() {
          const kehu = this.form.getFieldValue(\"select\");
          const user = localStorage.getItem(process.env.VUE_APP_USER_KEY).replace(\"\\\"\"\"\").replace(\"\\\"\"\"\")
          if (kehu){
            postDoc(user,kehu).then(
                (res=> {
                  this.id = res.data.uuid;
                  this.iupload = true;
                }
          )}else{
            this.$message.info(\"\u5fc5\u987b\u5148\u9009\u62e9\u4e0a\u4f20\u7684\u662f\u54ea\u5bb6\u7684\u6587\u6863\",10);
          }
    },
    goRecord(key) {
        window.open(key)
      }
}
}
</script>

\u63a5\u53e3\u4ee3\u7801
from Base.handler import BaseHandler
from playhouse.shortcuts import model_to_dict
import json
from utils import utils
from .model import doneFile
from apps.yw.models import KH
from settings import uploadApi
import requests
import uuid
'''
\u70b9\u51fb\u6587\u4ef6\u4e0a\u4f20\u6309\u94ae\uff0c\u6570\u636e\u5e93\u63d2\u5165\u6587\u4ef6\u8bb0\u5f55user,khId,\u51fa\u73b0\u6587\u4ef6\u4e0a\u4f20\u6846\u5f00\u59cb\u4e0a\u4f20\u9644\u4ef6\u53cd\u9988\u8f6c\u6362\u540e\u7684\u9884\u89c8\u5730\u5740\u3002
\u6587\u4ef6\u4e0a\u4f20\u6210\u529f\u540e\u628a\u9884\u89c8\u5730\u5740\uff0c\u6587\u4ef6\u5b58\u50a8\u5730\u5740\u66f4\u65b0
'''
class uploadFile(BaseHandler):
async def post(self,*args,**kwargs):
res = {}
try:
files = self.request.files.get('file')
files = files[0]
rep = requests.post(url=uploadApi, files=files)
data = json.loads(rep.text)
inpath = data['inpath']
outpath = data['outpath']
filename = data['filename']
res = {
'filename':filename,
'inpath':inpath,
'outpath':outpath
}
except Exception as e:
print(e)
self.finish(json.dumps(res, default=utils.json_serial))
class addFile(BaseHandler):
async def get(self):
khId = self.get_argument('khId', default=None, strip=True)
if khId:
query = doneFile.select(doneFile.outPath,doneFile.id,doneFile.filename,doneFile.khId,KH.khjg,KH.id).join(KH).where(doneFile.outPath!='' and doneFile.khId == khId).order_by(doneFile.add_time.desc())
else:
query = doneFile.select(doneFile.outPath,doneFile.id,doneFile.filename,doneFile.khId,KH.khjg,KH.id).join(KH).where(doneFile.outPath!='').order_by(doneFile.add_time.desc())
wjs = await self.application.objects.execute(query)
count = await self.application.objects.count(query)
results = []
for wj in wjs:
results.append(model_to_dict(wj))
res = {
\"count\": str(count),
\"results\": results
}
self.finish(json.dumps(res, default=utils.json_serial))
##\u63d2\u5165\u6587\u4ef6\u8bb0\u5f55user,khId
async def post(self,*args,**kwargs):
res={}
try:
data = self.request.body
data = data.decode('utf-8')
data = json.loads(data)
user = data['user']
khId = data['khId']
id = str(uuid.uuid1())
await self.application.objects.create(
doneFile,
id = id,
user = user,
khId = khId,
)
res['uuid'] = id
except Exception as e:
res['detail'] = '\u4f20\u5165\u53c2\u6570\u6709\u8bef'
print(e)
self.finish(json.dumps(res, default=utils.json_serial))
class updateFile(BaseHandler):
##\u66f4\u65b0\u8bb0\u5f55
async def post(self,*args,**kwargs):
res={}
data = self.request.body
data = data.decode('utf-8')
data = json.loads(data)
id= data['id']
filename = data['filename']
inpath = data['inpath']
outpath = data['outpath']
try:
query = doneFile.select().where(doneFile.id == id )
wj = await self.application.objects.execute(query)
wj = wj[0]
wj.filename = filename
wj.inPath = inpath
wj.outPath = outpath
await self.application.objects.update(wj)
res['code'] = 201
res['detail'] = '\u6587\u4ef6\u4e0a\u4f20\u6210\u529f'
except Exception as e:
print(e)
res['detail'] = '\u6587\u4ef6\u4e0a\u4f20\u5931\u8d25\u3002'
self.set_status(404)
self.finish(json.dumps(res, default=utils.json_serial))

"}, {"title": "vueNGINX+python\u540e\u53f0\u63a5\u53e3\u90e8\u7f72\u5230\u670d\u52a1\u5668\u4e0a\u767b\u5f55\u8d26\u53f7\u63d0\u793a\u5bc6\u7801\u8d26\u53f7\u4e0d\u5b58\u5728", "desc": "\u9879\u76ee\u603b\u4f53\u67b6\u6784\uff0c\u524d\u7aef\u4f7f\u7528ant-design-vue,\u540e\u7aef\u81ea\u5df1\u5199\u7684Python\u63a5\u53e3\uff0c\u672c\u5730\u9879\u76ee\u6b63\u5e38\u90e8\u7f72\u5230\u670d\u52a1\u5668\u767b\u5f55\u62a5\u9519\u3002", "content": "

1.\u524d\u7aef\u4f7f\u7528\u7684\u662fant-design-vue\u90e8\u7f72\u5728Docker\u5bb9\u5668\u91cc\uff0c\u955c\u50cf\u4f7f\u7528\u7684\u662f docker.io/nginx:1.18.0-alpine

2.\u540e\u7aef\u4f7f\u7528\u7684\u662fpython\u81ea\u5df1\u5199\u7684\u63a5\u53e3\u901a\u8fc7NGINX\uff0c\u53cd\u5411\u4ee3\u7406\u8bf7\u6c42\u3002\u4f7f\u7528\u7684python\u955c\u50cf\u662f docker.io/pypy:3

3.\u62a5\u9519\u73b0\u8c61\u524d\u7aef\u63d0\u793a\u7528\u6237\u540d\u5bc6\u7801\u9519\uff0c\u662f\u6211\u81ea\u5df1\u63a5\u53e3\u8fd4\u56de\u7684\u5f02\u5e38\uff0c\u5ffd\u7565\u3002\u67e5\u770b\u540e\u7aef\u670d\u52a1\u5668\u62a5\u9519\u4fe1\u606f

\u65e5\u5fd7

2021-05-26 09:27:03 INFO web.py log_request:2243 : 201 POST /api/login (172.17.0.1) 504.81ms

2021-05-26 17:28:22 INFO web.py log_request:2243 : 304 GET /api/content (172.17.0.1) 17.42ms

\u8bf7\u6c42\u5230\u8bf4\u660e\u8c03\u7528\u5230\u63a5\u53e3\u4e86\uff0c\u5728\u770b\u5bb9\u5668\u65e5\u5fd7\u3002
[root@Docker ~]# docker logs ywgl
/opt/pypy/lib-python/3/importlib/_bootstrap.py:228: UserWarning: datetime.date size changed, may indicate binary incompatibility. Expected 24 from C header, got 40 from PyObject
  return f(*args, **kwds)
/opt/pypy/lib-python/3/importlib/_bootstrap.py:228: UserWarning: datetime.date size changed, may indicate binary incompatibility. Expected 24 from C header, got 40 from PyObject
\u7b2c\u4e00\u53cd\u5e94\u662f\u53ef\u80fd\u65f6\u95f4\u4e0d\u5bf9\uff0c\u4fee\u6539\u5bb9\u5668\u65f6\u95f4\u5e76\u91cd\u542f\u5bb9\u5668
[root@Docker ~]# docker exec -it ywgl sh
# date
Wed May 26 09:27:32 UTC 2021
# cp /usr/share/zoneinfo/Asia/Shanghai    /etc/localtime
# date
Wed May 26 17:27:54 CST 2021
# exit
[root@Docker ~]# docker restart ywgl
ywgl
\u767b\u5f55\u6b63\u5e38
4.\u65e5\u671f\u4e0d\u5bf9\u5bfc\u81f4\u767b\u5f55\u5f02\u5e38\u4e3b\u8981\u662f\u540e\u7aef\u4ee3\u7801\u4f7f\u7528\u4e86\u65e5\u671f\u751f\u6210\u4e86Token\uff0c\u4ee5\u6b64\u8bb0\u5f55\uff0c\u9632\u6b62\u4e0b\u6b21\u518d\u72af\u9519\u6d6a\u8d39\u65f6\u95f4\u3002
\u4e3b\u8981\u6838\u5fc3\u4ee3\u7801
payload = {
'id': user.id,
'yhm': yhm,
'exp': datetime.utcnow()
}
token = jwt.encode(payload, self.settings[\"secret_key\"], algorithm='HS256')
"}, {"title": "vue-quill-editor\u8bbe\u7f6e\u652f\u6301\u4e2d\u6587\u5b57\u4f53", "desc": "\u6ce8\u610f\u5982\u679c\u6267\u884c\u4e86yarn install \u9700\u8981\u91cd\u65b0\u5728quill.core.css\u548cquill.snow.css\u6dfb\u52a0\u6837\u5f0f\uff0c\u4e0d\u7136\u4f1a\u5bfc\u81f4\u8f93\u5165\u8c03\u6574\u5931\u8d25.", "content": "

\u6548\u679c\u56fe

1.\u5728quill/dist/quill.core.css.\u6dfb\u52a0\u6837\u5f0f

.ql-editor .ql-font-Microsoft-YaHei {
  font-family\"Microsoft YaHei\";
}
.ql-editor .ql-font-SimSun {
  font-family\"SimSun\";
}
.ql-editor .ql-font-SimHei {
  font-family\"SimHei\";
}
.ql-editor .ql-font-KaiTi {
  font-family\"KaiTi\";
}
.ql-editor .ql-font-FangSong {
  font-family\"FangSong\";
}
.ql-editor .ql-font-Arial {
  font-family\"Arial\";
}

.ql-snow .ql-picker.ql-font .ql-picker-item::before {
  content'\u5fae\u8f6f\u96c5\u9ed1';
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Microsoft-YaHei]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Microsoft-YaHei]::before {
 content\"\u5fae\u8f6f\u96c5\u9ed1\";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=SimSun]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=SimSun]::before {
  content\"\u5b8b\u4f53\";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=SimHei]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=SimHei]::before {
 content\"\u9ed1\u4f53\";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=KaiTi]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=KaiTi]::before {
 content\"\u6977\u4f53\";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=FangSong]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=FangSong]::before {
 content\"\u4eff\u5b8b\";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Arial]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Arial]::before {
 content\"Arial\";
}

3.\u4ee3\u7801\u5b9e\u73b0
<script>
import \"quill/dist/quill.core.css\";
import \"quill/dist/quill.snow.css\";
import { quillEditorQuill } from \"vue-quill-editor\";
import { postContent } from \"@/services/content\";
import hljs from \"highlight.js\";
// highlight.js style
import \"highlight.js/styles/tomorrow.css\";
const fonts = [
  \"SimSun\",
  \"SimHei\",
  \"Microsoft-YaHei\",
  \"KaiTi\",
  \"FangSong\",
  \"Arial\"
];
const Font = Quill.import(\"formats/font\");
Font.whitelist = fonts;
Quill.register(Fonttrue);

export default {
  name: \"quill-bubble\",
  title: \"Theme:snow\",
  components: {
    quillEditor,
  },
  data() {
    return {
      value: \"\",
      editorOption: {
        theme: 'snow',
        modules: {
          toolbar: [
            [\"bold\"\"italic\"\"underline\"\"strike\"],
            [\"blockquote\"\"code-block\"],
            [{ header: 1 }, { header: 2 }],
            [{ list: \"ordered\" }, { list: \"bullet\" }],
            [{ script: \"sub\" }, { script: \"super\" }],
            [{ indent: \"-1\" }, { indent: \"+1\" }],
            [{ direction: \"rtl\" }],
            [{ size: [\"small\"false\"large\"\"huge\"] }],
            [{ header: [123456false] }],
            [{ font: fonts }],
            [{ color: [] }, { background: [] }],
            [{ align: [] }],
            [\"clean\"],
            [\"link\"\"image\"],
          ],
          syntax: {
            highlight: (text=> hljs.highlightAuto(text).value,
          },
        },
      },
      content: \"\",
    };
  },
.....\u7701\u7565\u5176\u5b83\u4ee3\u7801
\u4e3b\u8981\u662f\u8fd9\u91cc\u8c03\u7528\u5b9a\u4e49\u7684\u5b57\u4f53 [{ font: fonts }],


"}, {"title": "oracle\u6570\u636e\u5e93\u8fc1\u79fb\u62a5\u9519", "desc": "\u4e91\u4e3b\u673a\u4f9b\u5e94\u5546\u628a\u8fc1\u79fb\u4e91\u4e3b\u673a\uff0c\u53ef\u80fd\u662f\u6ca1\u5173\u95edoracle\u8fc1\u79fb\u5230\u65b0\u670d\u52a1\u5668\u4e0astartup\u62a5\u9519ORA-00214:\u5bfc\u81f4\u6570\u636e\u5e93\u4e0d\u80fdmount\uff0c\u4e5f\u4e0d\u80fdopen.", "content": "

\u62a5\u9519\u4fe1\u606f

[oracle@qianzhiji ~]$ sqlplus / as sysdba


SQL*Plus: Release 11.2.0.4.0 Production on Sat Mar 13 21:48:59 2021


Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to an idle instance.


SQL> startup

ORACLE instance started.


Total System Global Area 2137886720 bytes

Fixed Size                  2254952 bytes

Variable Size             587204504 bytes

Database Buffers         1543503872 bytes

Redo Buffers                4923392 bytes

ORA-00214: control file '/app/oracle/oradata/orcl/control01.ctl' version 348099

inconsistent with file '/app/oracle/fast_recovery_area/orcl/control02.ctl'

version 348096

---------------------------------\u89e3\u51b3\u65b9\u6848----------------------------------------------

\u4fee\u6539\u4e3a\u65e7\u7684\u63a7\u5236\u6587\u4ef6\u4e0d\u884c

SQL> alter system set control_files='/app/oracle/fast_recovery_area/orcl/control02.ctl' scope=spfile;


System altered.


SQL> startup

ORACLE instance started.


Total System Global Area 2137886720 bytes

Fixed Size                  2254952 bytes

Variable Size             587204504 bytes

Database Buffers         1543503872 bytes

Redo Buffers                4923392 bytes

Database mounted.

ORA-01122: database file 1 failed verification check

ORA-01110: data file 1: '/app/oracle/oradata/orcl/system01.dbf'

ORA-01207: file is more recent than control file - old control file


---\u5907\u4efd\u63a7\u5236\u6587\u4ef6\u4fe1\u606f

SQL> startup mount

ORA-01081: cannot start already-running ORACLE - shut it down first

SQL> alter database backup controlfile to trace as '/app/oracle/tra.trc';


Database altered.

----\u67e5\u770b\u5907\u4efd\u6587\u4ef6\u5185\u5bb9

[oracle@qianzhiji oracle]$ ls

admin  cfgtoollogs  checkpoints  diag  fast_recovery_area  oradata  product  tra.trc

[oracle@qianzhiji oracle]$ more tra.trc

-- The following are current System-scope REDO Log Archival related

-- parameters and can be included in the database initialization file.

--

-- LOG_ARCHIVE_DEST=''

-- LOG_ARCHIVE_DUPLEX_DEST=''

--

-- LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf

--

-- DB_UNIQUE_NAME=\"orcl\"

--

-- LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'

-- LOG_ARCHIVE_MAX_PROCESSES=4

-- STANDBY_FILE_MANAGEMENT=MANUAL

-- STANDBY_ARCHIVE_DEST=?/dbs/arch

-- FAL_CLIENT=''

-- FAL_SERVER=''

--

-- LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'

-- LOG_ARCHIVE_DEST_1='MANDATORY NOREOPEN NODELAY'

-- LOG_ARCHIVE_DEST_1='ARCH NOAFFIRM EXPEDITE NOVERIFY SYNC'

-- LOG_ARCHIVE_DEST_1='NOREGISTER NOALTERNATE NODEPENDENCY'

-- LOG_ARCHIVE_DEST_1='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'

-- LOG_ARCHIVE_DEST_1='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'

-- LOG_ARCHIVE_DEST_STATE_1=ENABLE


--

-- Below are two sets of SQL statements, each of which creates a new

-- control file and uses it to open the database. The first set opens

-- the database with the NORESETLOGS option and should be used only if

-- the current versions of all online logs are available. The second

-- set opens the database with the RESETLOGS option and should be used

-- if online logs are unavailable.

-- The appropriate set of statements can be copied from the trace into

-- a script file, edited as necessary, and executed when there is a

-- need to re-create the control file.

--

--     Set #1. NORESETLOGS case

--

-- The following commands will create a new control file and use it

-- to open the database.

-- Data used by Recovery Manager will be lost.

-- Additional logs may be required for media recovery of offline

-- Use this only if the current versions of all online logs are

-- available.


-- After mounting the created controlfile, the following SQL

-- statement will place the database in the appropriate

-- protection mode:

--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE


STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE \"ORCL\" NORESETLOGS  NOARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 2 '/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 3 '/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

  '/app/oracle/oradata/orcl/system01.dbf',

  '/app/oracle/oradata/orcl/sysaux01.dbf',

  '/app/oracle/oradata/orcl/undotbs01.dbf',

  '/app/oracle/oradata/orcl/users01.dbf',

  '/app/oracle/oradata/orcl/jnjh.dbf',

  '/app/oracle/oradata/orcl/zdry_ldba.DBF'

CHARACTER SET ZHS16GBK

;


-- Commands to re-create incarnation table

-- Below log names MUST be changed to existing filenames on

-- disk. Any one log file from each branch can be used to

-- re-create incarnation records.

-- ALTER DATABASE REGISTER LOGFILE '/app/oracle/fast_recovery_area/ORCL/archivelog/2021_03_13/o1_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE '/app/oracle/fast_recovery_area/ORCL/archivelog/2021_03_13/o1_mf_1_1_%u_.arc';

-- Recovery is required if any of the datafiles are restored backups,

-- or if the last shutdown was not normal or immediate.

RECOVER DATABASE


-- Database can now be opened normally.

ALTER DATABASE OPEN;


-- Commands to add tempfiles to temporary tablespaces.

-- Online tempfiles have complete space information.

-- Other tempfiles may require adjustment.

ALTER TABLESPACE TEMP ADD TEMPFILE '/app/oracle/oradata/orcl/temp01.dbf' REUSE;

ALTER TABLESPACE JNJH_TEMP ADD TEMPFILE '/app/oracle/oradata/orcl/jnjh_temp.dbf' REUSE;

ALTER TABLESPACE ZDRY_LDBA_TEMP ADD TEMPFILE '/app/oracle/oradata/orcl/zdry_ldba_TEMP.DBF' REUSE;

-- End of tempfile additions.

--

--     Set #2. RESETLOGS case

--

-- The following commands will create a new control file and use it

-- to open the database.

-- Data used by Recovery Manager will be lost.

-- The contents of online logs will be lost and all backups will

-- be invalidated. Use this only if online logs are damaged.


-- After mounting the created controlfile, the following SQL

-- statement will place the database in the appropriate

-- protection mode:

--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE


STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE \"ORCL\" RESETLOGS  NOARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 2 '/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 3 '/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

  '/app/oracle/oradata/orcl/system01.dbf',

  '/app/oracle/oradata/orcl/sysaux01.dbf',

  '/app/oracle/oradata/orcl/undotbs01.dbf',

  '/app/oracle/oradata/orcl/users01.dbf',

  '/app/oracle/oradata/orcl/jnjh.dbf',

  '/app/oracle/oradata/orcl/zdry_ldba.DBF'

CHARACTER SET ZHS16GBK

;


-- Commands to re-create incarnation table

-- Below log names MUST be changed to existing filenames on

-- disk. Any one log file from each branch can be used to

-- re-create incarnation records.

-- ALTER DATABASE REGISTER LOGFILE '/app/oracle/fast_recovery_area/ORCL/archivelog/2021_03_13/o1_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE '/app/oracle/fast_recovery_area/ORCL/archivelog/2021_03_13/o1_mf_1_1_%u_.arc';

-- Recovery is required if any of the datafiles are restored backups,

-- or if the last shutdown was not normal or immediate.

RECOVER DATABASE USING BACKUP CONTROLFILE


-- Database can now be opened zeroing the online logs.

ALTER DATABASE OPEN RESETLOGS;


-- Commands to add tempfiles to temporary tablespaces.

-- Online tempfiles have complete space information.

-- Other tempfiles may require adjustment.

ALTER TABLESPACE TEMP ADD TEMPFILE '/app/oracle/oradata/orcl/temp01.dbf' REUSE;

ALTER TABLESPACE JNJH_TEMP ADD TEMPFILE '/app/oracle/oradata/orcl/jnjh_temp.dbf' REUSE;

ALTER TABLESPACE ZDRY_LDBA_TEMP ADD TEMPFILE '/app/oracle/oradata/orcl/zdry_ldba_TEMP.DBF' REUSE;

-- End of tempfile additions.


-----\u6267\u884c\u63a7\u5236\u6587\u4ef6

\u542f\u52a8\u6570\u636e\u5e93\u8fdb\u5165nomount\u72b6\u6001

SQL> STARTUP NOMOUNT

ORACLE instance started.


Total System Global Area 2137886720 bytes

Fixed Size                  2254952 bytes

Variable Size             587204504 bytes

Database Buffers         1543503872 bytes

Redo Buffers                4923392 bytes


\u6267\u884cSQL(SQL\u5185\u5bb9\u662f\u6211\u4e0a\u9762\u5907\u4efd\u7684/app/oracle/tra.trc \u5f53\u4e2d\u4eceSTARTUP NOMOUNT \u4e00\u76f4\u5230CHA 19  RACTER SET ZHS16GBK\uff1b\u8fd9\u4e00\u6bb5)\u76f4\u63a5\u590d\u5236\u5c31\u884c

SQL> CREATE CONTROLFILE REUSE DATABASE \"ORCL\" RESETLOGS  NOARCHIVELOG

     2   MAXLOGFILES 16

     3   MAXLOGMEMBERS 3

    4    MAXDATAFILES 100

  5      MAXINSTANCES 8

   6     MAXLOGHISTORY 292

L  7  OGFILE

  GR  8  OUP 1 '/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,

   9   GROUP 2 '/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,

  10   GROUP 3 '/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512

-- ST 11  ANDBY LOGFILE

D 12  ATAFILE

   13  '/app/oracle/oradata/orcl/system01.dbf',

  '/a 14  pp/oracle/oradata/orcl/sysaux01.dbf',

   15  '/app/oracle/oradata/orcl/undotbs01.dbf',

  ' 16  /app/oracle/oradata/orcl/users01.dbf',

   17  '/app/oracle/oradata/orcl/jnjh.dbf',

  18   '/app/oracle/oradata/orcl/zdry_ldba.DBF'

CHA 19  RACTER SET ZHS16GBK

; 20


---\u542f\u52a8\u5173\u95ed\u6d4b\u8bd5\u51e0\u6b21\u5747\u6210\u529f\u641e\u5b9a

SQL> ALTER DATABASE mount;


Database altered.


SQL> RECOVER DATABASE

Media recovery complete.

SQL> ALTER DATABASE OPEN;


Database altered.


SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.


Total System Global Area 2137886720 bytes

Fixed Size                  2254952 bytes

Variable Size             587204504 bytes

Database Buffers         1543503872 bytes

Redo Buffers                4923392 bytes

Database mounted.

Database opened.

SQL> shutdown

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.


Total System Global Area 2137886720 bytes

Fixed Size                  2254952 bytes

Variable Size             587204504 bytes

Database Buffers         1543503872 bytes

Redo Buffers                4923392 bytes

Database mounted.

Database opened.

SQL>

"}, {"title": "GitHub\u4e0a\u4f20\u9879\u76ee\u5931\u8d25", "desc": "\u4e3b\u8981\u662f\u56fd\u5185\u7f51\u7edc\u9650\u5236\u5bfc\u81f4\u7684\u63d0\u4ea4\u5931\u8d25\uff0c\u5982\u679cIDEA\u7248\u672c\u6bd4\u8f83\u9ad8\u7684\u8bdd\u53ef\u4ee5\u5728git\u91cc\u9762\u8bbe\u7f6eGit Remotes \u8bbe\u7f6e\u4e00\u4e2ahttp\u7684\uff0c\u4e0d\u7528https\u5373\u53ef\u3002", "content": "

\u62a5\u9519\u5185\u5bb9\uff1a

15:44:25 Push failed

         Failed with error: Fatal: HttpRequestException encountered.

         fatal: unable to access 'https://github.com/zhoudl/zhoudl.github.io.git/': Unknown SSL protocol error in connection to github.com:443


\u89e3\u51b3\u65b9\u6848\uff1a

1.\u9ad8\u7248\u672c\u7684IDEA\uff0c\u53f3\u51fb\u9879\u76ee\u9009\u62e9 GIT --> Repository --> Git Remotes \u91cc\u9762\u6dfb\u52a0\u4e00\u4e2ahttp \u7684\u6bd4\u5982\uff1ahttp://github.com/zhoudl/zhoudl.github.io.git

2.\u9488\u5bf9\u4e8e\u4f4e\u7248\u672c\u7684IDEA\uff0c\u6bd4\u5982 WebStorm 11.0.3 \u3002\u53ef\u4ee5\u5728\u9879\u76ee\u76ee\u5f55\u4e0b\u627e\u5230  .git \u76ee\u5f55\uff0c\u6253\u5f00 config \u6587\u4ef6\u4fee\u6539 url \u5730\u5740

3.\u4fee\u6539\u5168\u5c40\u914d\u7f6e\uff0c\u5728\u7528\u6237\u76ee\u5f55\u4e0b\u6709\u4e2a .gitconfig \u6587\u4ef6

[http]

\tproxy=127.0.0.1:5600

\tsslVerify=false


\u5176\u4e2d proxy=127.0.0.1:5600 \u662f\u6211\u672c\u5730\u7684\u7684\u7ffb\u5899\u5730\u5740\uff0c\u8fd9\u79cd\u65b9\u6cd5\u6700\u5feb\uff0c\u5c31\u662f\u9700\u8981VPN


\u6210\u529f\u72b6\u6001\uff1a

C:\\Users\\zhoudl\\WebstormProjects\\gaode>git push http://github.com/zhoudl/zhoudl.github.io.git master:master

Fatal: HttpRequestException encountered.

Username for 'https://github.com': zhoudl

Password for 'https://zhoudl@github.com':

Counting objects: 3, done.

Delta compression using up to 8 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 1.29 KiB | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To http://github.com/zhoudl/zhoudl.github.io.git

 * [new branch]      master -> master

WebStorm \u63d0\u4ea4\u4e5f\u6210\u529f\u4e86

15:42:21 \u5e73\u53f0\u548c\u63d2\u4ef6\u66f4\u65b0: WebStorm \u51c6\u5907\u66f4\u65b0\u3002

15:43:31 Rebase Error: Cannot rebase: Your index contains uncommitted changes.

15:44:25 Push failed

         Failed with error: Fatal: HttpRequestException encountered.

         fatal: unable to access 'https://github.com/zhoudl/zhoudl.github.io.git/': Unknown SSL protocol error in connection to github.com:443 

16:21:23 Push successful: Pushed zhoudl.github.io.git to new branch origin/zhoudl.github.io.git


"}, {"title": "Centos\u4e0b\u81ea\u5e26python\u5347\u7ea7PIP\u540e\u62a5\u9519", "desc": "pip\u5b89\u88c5djiango\u63d0\u793a\u5347\u7ea7pip\uff0c\u5347\u7ea7\u5b8c\u540e\u62a5\u9519\u3002", "content": "

\u62a5\u9519\u4fe1\u606f\uff1a

[root@python webvirtmgr]# pip

Traceback (most recent call last):

  File \"/usr/bin/pip\", line 9, in <module>

    load_entry_point('pip==21.0.1', 'console_scripts', 'pip')()

  File \"/usr/lib/python2.7/site-packages/pkg_resources.py\", line 378, in load_entry_point

    return get_distribution(dist).load_entry_point(group, name)

  File \"/usr/lib/python2.7/site-packages/pkg_resources.py\", line 2566, in load_entry_point

    return ep.load()

  File \"/usr/lib/python2.7/site-packages/pkg_resources.py\", line 2260, in load

    entry = __import__(self.module_name, globals(),globals(), ['__name__'])

  File \"/usr/lib/python2.7/site-packages/pip/_internal/cli/main.py\", line 60

    sys.stderr.write(f\"ERROR: {exc}\")

\u5904\u7406\u65b9\u6cd5\uff1a


[root@python webvirtmgr]# yum remove python-pip

[root@python src]# curl https://bootstrap.pypa.io/2.7/get-pip.py | python

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100 1863k  100 1863k    0     0  15753      0  0:02:01  0:02:01 --:--:-- 25133

DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.

Looking in indexes: https://mirrors.aliyun.com/pypi/simple/

Collecting pip<21.0

  Downloading https://mirrors.aliyun.com/pypi/packages/27/79/8a850fe3496446ff0d584327ae44e7500daf6764ca1a382d2d02789accf7/pip-20.3.4-py2.py3-none-any.whl (1.5 MB)

     |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 1.5 MB 6.2 MB/s 

Collecting wheel

  Downloading https://mirrors.aliyun.com/pypi/packages/65/63/39d04c74222770ed1589c0eaba06c05891801219272420b40311cd60c880/wheel-0.36.2-py2.py3-none-any.whl (35 kB)

Installing collected packages: pip, wheel

  Attempting uninstall: pip

    Found existing installation: pip 21.0.1

    Uninstalling pip-21.0.1:

      Successfully uninstalled pip-21.0.1

Successfully installed pip-20.3.4 wheel-0.36.2

[root@python src]# pip -V

pip 20.3.4 from /usr/lib/python2.7/site-packages/pip (python 2.7)

"}, {"title": "WORD\u8f6cPDF\u6838\u5fc3\u4ee3\u7801", "desc": "\u9879\u76ee\u4e2d\u7528\u6237\u4e0a\u4f20\u7684word\u6587\u6863\u9700\u8981\u9884\u89c8\u529f\u80fd\uff0c\u7f51\u4e0a\u641c\u7d22\u4e86\u51e0\u79cd\u65b9\u6cd5\u90fd\u4e0d\u592a\u597d\uff0c\u51b3\u5b9a\u7528\u5fae\u8f6f\u7684ExportAsFixedFormat\u65b9\u6cd5\u5bfc\u51fa\u6210PDF\u6587\u4ef6\u3002\u4e4b\u524d\u4e00\u76f4\u88abDocument.SaveAs2\u65b9\u6cd5\u7ed9\u8bef\u5bfc\u4e86\u3002\u5728\u5fae\u8f6f\u5b98\u65b9\u63d0\u95ee\u9898\u4e5f\u6ca1\u6709\u7ed9\u51fa\u7b54\u6848\u3002", "content": "

1.\u95ee\u9898\u73b0\u8c61

\u7535\u8111\u4e0a\u7684WORD\u7a0b\u5e8f\u53ef\u4ee5\u6253\u5f00\u4e00\u4e2adocx\u6587\u4ef6\u53e6\u5b58\u4e3aPDF\u683c\u5f0f\u7684\u6587\u4ef6\u3002\u4f46\u662f\u5728\u7f16\u7a0b\u7684\u65f6\u5019FileConverters[3].CanSave \u8fd4\u56de False \u4e0d\u80fd\u4fdd\u5b58\u3002\u5bfc\u81f4\u62a5\u9519\uff1a

(-2147352567, '\u53d1\u751f\u610f\u5916\u3002', (0, 'Microsoft Word', '\u5df2\u767b\u8bb0\u7684\u8f6c\u6362\u5668\u5747\u4e0d\u652f\u6301\u6309\u6b64\u683c\u5f0f\u4fdd\u5b58\u6587\u4ef6\u3002', 'wdmain11.chm', 25360, -2146822408),\u5927\u6982\u5c31\u662f\u8f6c\u6362\u5668\u53ea\u652f\u6301\u6253\u5f00\u4e0d\u652f\u6301\u4fdd\u5b58\uff0c\u53ef\u80fd\u662f\u672c\u5730\u7248\u672c\u6388\u6743\u95ee\u9898\u3002

2.\u4ee4\u5176\u601d\u8def\u4f7f\u7528 ExportAsFixedFormat \u7684\u5bfc\u51fa\u65b9\u6cd5

\u53c2\u8003\u7f51\u5740\uff1ahttps://docs.microsoft.com/zh-cn/office/vba/api/excel.chart.exportasfixedformat

\u6838\u5fc3python\u4ee3\u7801:

from win32com.client import Dispatch

def savePdf(filedoc):
wordApp = Dispatch('word.Application')
doc = wordApp.Documents.Open(FileName=filedoc,ReadOnly = True)
# 17\u4e3aPDF,18\u4e3aXPS\u3002\u53c2\u8003https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.word.wdexportformat?view=word-pia
output = filedoc.split('.')
output = output[0] + '.pdf'
doc.ExportAsFixedFormat(OutputFileName=output, ExportFormat=17)
# print(wordApp.FileConverters[3].CanSave)
# doc.SaveAs2('2.pdf',FileFormat=wordApp.FileConverters[3].SaveFormat)
doc.Close()
wordApp.Quit()
return output


"}, {"title": "python\u5b9e\u73b0\u8d44\u6e90\u76d1\u63a7\u5c0f\u5de5\u5177", "desc": "\u5b9e\u9645\u9879\u76ee\u4e2d\u5927\u90e8\u5206\u673a\u5668\u5728\u5185\u7f51\uff0c\u53ea\u6709\u5e94\u7528\u670d\u52a1\u5668\u6709\u4e92\u8054\u7f51\u3002\u601d\u8def\u5728\u5e94\u7528\u670d\u52a1\u5668\u4e0a\u90e8\u7f72\u63a5\u53e3\uff0c\u5176\u4ed6\u673a\u5668\u4e0a\u76d1\u63a7\u5c0f\u8f6f\u4ef6\u5c06\u544a\u8b66\u4fe1\u606f\u901a\u8fc7\u63a5\u53e3\u8c03\u7528Post\u81f3\u5e94\u7528\u670d\u52a1\u5668\uff0c\u5e94\u7528\u670d\u52a1\u5668\u53d1\u9001\u90ae\u4ef6\u6216\u8005\u77ed\u4fe1\u544a\u8b66\u3002", "content": "

\u5e94\u7528\u7aef\u4e3b\u8981\u63a7\u5236\u5c42\u4ee3\u7801(handler.py)\uff1a

from tornado.web import RequestHandler
from tornado_email.send_email import send_email
class Handler(RequestHandler):
def post(self,*args,**kwargs):
try:
xmm = self.get_argument(\"xmm\")
disk_info = self.get_argument(\"disk_info\")
receiver = self.get_argument(\"receiver\")
if xmm and disk_info:
send_email(xmm, disk_info, receiver)
except Exception as e:
print(e)
\n\u53d1\u9001\u90ae\u4ef6\u4ee3\u7801 send_email.py

import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_email(xmm,msg,receiver):
mail_host=\"smtp.qq.com\"
mail_port=\"465\"
username=\"120231708@qq.com\"
passwd=\"\u8fd9\u91cc\u5bc6\u7801\u4fdd\u5bc6\"
sender=\"120231708@qq.com\"
message = MIMEText(msg, 'plain', 'utf-8')
message['From'] = Header(\"\u7cfb\u7edf\u7ba1\u7406\u5458\", 'utf-8') # \u53d1\u9001\u8005
message['To'] = Header(\"\u5468\u4e1c\u6797\", 'utf-8') # \u63a5\u6536\u8005

subject = xmm+\"||\u8d44\u6e90\u7d27\u5f20\u9884\u8b66\"
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 \u4e3a SMTP \u7aef\u53e3\u53f7
smtpObj.login( username,passwd)
smtpObj.sendmail(sender, receiver.split(','), message.as_string())
except smtplib.SMTPException as e:
print(e)

=======

\u4f7f\u7528\u7684\u662fQ\u90ae\u7bb1\uff0c\u9700\u8981\u5ba2\u6237\u7aef\u4f20\u8f93\u670d\u52a1\u5668\u540d\u79f0\uff08xmm\uff09,msg(\u544a\u8b66\u4fe1\u606f)\uff0creceiver\uff08\u90ae\u4ef6\u63a5\u6536\u8005\uff0c\u591a\u4e2a\u63a5\u6536\u8005\u7528\u82f1\u6587\u9017\u53f7\u95f4\u9694\uff09


========================================\u5206\u5272\u7ebf=======================================================

\u76d1\u63a7\u7aef\u4ee3\u7801get_info.py \u7528\u4e8e\u6536\u96c6\u670d\u52a1\u5668\u8d44\u6e90\u5229\u7528\u60c5\u51b5\uff0c\u8d85\u989d\u5c31\u8c03\u7528\u63a5\u53e3\u53d1\u9001\u90ae\u4ef6\u3002

import psutil
from info_post_email.post_email import post_email
# \u83b7\u53d6\u672c\u673a\u78c1\u76d8\u4f7f\u7528\u7387\u548c\u5269\u4f59\u7a7a\u95f4G\u4fe1\u606f
def get_disk_info(url,xmm,receiver):
# \u5faa\u73af\u78c1\u76d8\u5206\u533a
for disk in psutil.disk_partitions():
# \u8bfb\u5199\u65b9\u5f0f \u5149\u76d8 or \u6709\u6548\u78c1\u76d8\u7c7b\u578b
if 'cdrom' in disk.opts or disk.fstype == '':
continue
disk_name_arr = disk.mountpoint.split(':')
disk_name = disk_name_arr[0]
disk_info = psutil.disk_usage(disk.mountpoint)
# \u78c1\u76d8\u5269\u4f59\u7a7a\u95f4\uff0c\u5355\u4f4dG
free_disk_size = disk_info.free//1024//1024//1024
disk_total_size = disk_info.total//1024//1024//1024
# \u5f53\u524d\u78c1\u76d8\u4f7f\u7528\u7387\u548c\u5269\u4f59\u7a7a\u95f4G\u4fe1\u606f
if disk_info.percent > 95:
email_info ={}
disk_percent = str(disk_info.percent)
disk_info = \"%s\u76d8%iG\u4f7f\u7528\u7387\uff1a%s%%\uff0c \u5269\u4f59\u7a7a\u95f4\uff1a%iG\" % (disk_name,disk_total_size, disk_percent, free_disk_size)
email_info = {
\"xmm\" : xmm,
\"disk_info\" : disk_info,
\"receiver\" : receiver
}
post_email(url,email_info)
return disk_info
# cpu\u4fe1\u606f
def get_cpu_info(url,xmm,receiver):
cpu_percent = psutil.cpu_percent(interval=1)
if cpu_percent > 90:
cpu_info = \"CPU\u4f7f\u7528\u7387\uff1a%i%%\" % cpu_percent
email_info = {
\"xmm\": xmm,
\"disk_info\": cpu_info,
\"receiver\": receiver
}
post_email(url, email_info)
return cpu_info
# \u5185\u5b58\u4fe1\u606f
def get_memory_info(url,xmm,receiver):
virtual_memory = psutil.virtual_memory()
total_memory = virtual_memory.total/1024/1024/1024
used_memory = virtual_memory.used/1024/1024/1024
free_memory = virtual_memory.free/1024/1024/1024
memory_percent = virtual_memory.percent
if memory_percent > 90:
memory_info = \"\u603b\u5185\u5b58%0.2fG\u4f7f\u7528\uff1a%0.2fG\uff0c\u4f7f\u7528\u7387%0.1f%%\uff0c\u5269\u4f59\u5185\u5b58\uff1a%0.2fG\" % (total_memory,used_memory, memory_percent, free_memory)
email_info = {
\"xmm\": xmm,
\"disk_info\": memory_info,
\"receiver\": receiver
}
post_email(url, email_info)
return memory_info


\u8c03\u7528\u63a5\u53e3\u4ee3\u7801post_email.py\u4f7f\u7528\u7684\u662furllib3

from urllib.parse import urlencode
import urllib3
def post_email(url,data):
data = urlencode(data)
url = url + '?' + data
http = urllib3.PoolManager()
try:
respose = http.request('post', url)
except Exception as e:
with open('logs.txt','ab+') as f:
f.write(e)

\u5ba2\u6237\u7aef\u754c\u9762\u4ee3\u7801\uff1a

# -*- coding: utf-8 -*-

###########################################################################
## Python code generated with wxFormBuilder (version Oct 26 2018)
## http://www.wxformbuilder.org/
##
## PLEASE DO *NOT* EDIT THIS FILE!
###########################################################################

import wx
import wx.xrc

###########################################################################
## Class MyFrame1
###########################################################################

class MyFrame1 ( wx.Frame ):

def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u\"\u8d44\u6e90\u5229\u7528\u7387\u76d1\u63a7||\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u4fee\u6539\u63a5\u53e3\u548c\u63a5\u6536\u4eba\u90ae\u7bb1||\u4e0d\u8981\u5173\u95ed\", pos = wx.DefaultPosition, size = wx.Size( 480,360 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )

bSizer1 = wx.BoxSizer( wx.VERTICAL )

self.cpu = wx.StaticText( self, wx.ID_ANY, u\"\u6682\u65e0CPU\u544a\u8b66\", wx.DefaultPosition, wx.DefaultSize, 0 )
self.cpu.Wrap( -1 )

bSizer1.Add( self.cpu, 0, wx.ALL, 5 )

self.mem = wx.StaticText( self, wx.ID_ANY, u\"\u6682\u65e0\u5185\u5b58\u544a\u8b66\", wx.DefaultPosition, wx.DefaultSize, 0 )
self.mem.Wrap( -1 )

bSizer1.Add( self.mem, 0, wx.ALL, 5 )

self.disk = wx.StaticText( self, wx.ID_ANY, u\"\u6682\u65e0\u78c1\u76d8\u544a\u8b66\", wx.DefaultPosition, wx.DefaultSize, 0 )
self.disk.Wrap( -1 )

bSizer1.Add( self.disk, 0, wx.ALL, 5 )

self.m_staticText8 = wx.StaticText( self, wx.ID_ANY, u\"\u6bcf6\u5c0f\u65f6\u68c0\u6d4b1\u6b21\", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText8.Wrap( -1 )

bSizer1.Add( self.m_staticText8, 0, wx.ALL, 5 )

self.m_staticText9 = wx.StaticText( self, wx.ID_ANY, u\"\u5148\u8f93\u5165\u670d\u52a1\u5668\u540d\u79f0\u5728\u70b9\u51fb\u5f00\u59cb\u76d1\u63a7\", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText9.Wrap( -1 )

bSizer1.Add( self.m_staticText9, 0, wx.ALL, 5 )

self.m_textCtrl1 = wx.TextCtrl( self, wx.ID_ANY, u\"\u5148\u8f93\u5165\u670d\u52a1\u5668\u540d\u79f0\", wx.DefaultPosition, wx.Size( 220,30 ), 0 )
bSizer1.Add( self.m_textCtrl1, 0, wx.ALL, 5 )

self.m_textCtrl2 = wx.TextCtrl( self, wx.ID_ANY, u\"http://email.jschrj.com/post_email/\", wx.DefaultPosition, wx.Size( 280,30 ), 0 )
bSizer1.Add( self.m_textCtrl2, 0, wx.ALL, 5 )

self.m_textCtrl3 = wx.TextCtrl( self, wx.ID_ANY, u\"120231708@qq.com,1023779908@qq.com\", wx.DefaultPosition, wx.Size( 280,30 ), 0 )
bSizer1.Add( self.m_textCtrl3, 0, wx.ALL, 5 )

self.m_button1 = wx.Button( self, wx.ID_ANY, u\"\u5f00\u59cb\u76d1\u63a7\", wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer1.Add( self.m_button1, 0, wx.ALL, 5 )


self.SetSizer( bSizer1 )
self.Layout()

self.Centre( wx.BOTH )

# Connect Events
self.m_button1.Bind( wx.EVT_BUTTON, self.begin )

def __del__( self ):
pass


# Virtual event handlers, overide them in your derived class
def begin( self, event ):
event.Skip()