作者: 42
通過nginx的access log可以記錄訪問日誌,如果只想記錄特定的某條請求,例如所有以/get開頭的請求,可以這麼配置:
map $request $loggable { ~/get* 1; default 0; } server { listen 8085; server_name 127.0.0.1; charset utf-8; access_log logs/flask.access.log combined if=$loggable; location / { try_files $uri @yourapplication; } location @yourapplication { include uwsgi_params; uwsgi_pass 127.0.0.1:3031; } }
如果要排除,只記錄以/get開頭的請求,map可以這麼寫
map $request $loggable { ~/get* 0; default 1; }
修改之後可以通過 tail -f ../logs/flask.access.log實時查看log的變動。
我的這塊戴爾S2340Mc屏,黑色時完全就是一面鏡子!為了當鏡子用,我需要一塊黑色。另外div中height設1000%是不行,參考height: 100% not working。
浮動無邊黑屏
#!/usr/bin/python3 # -*- coding: utf8 -*- #dnf install python3-matplotlib #pip install matplotlib,fire #指定起始坐標xy、寬度、高度和顏色,來畫一個填充好的矩形 #為了遮擋盜版電影頂部和底部的賭城廣告 import fire,matplotlib def drawRectangle(x='0',y='0',width='400',length='400',color='black'): #"640x400+0+200" conf = str(width) + 'x' + str(length) + '+' + str(x) + '+' + str(y) # make sure Tk backend is used matplotlib.use("TkAgg") import matplotlib.pyplot as plt # turn navigation toolbar off plt.rcParams['toolbar'] = 'None' plt.rcParams['figure.facecolor'] = color # create a figure and subplot fig, ax = plt.subplots(figsize=(2,2)) #remove margins fig.subplots_adjust(0,0,1,1) # turn axes off ax.axis("off") # show image # im = plt.imread("black.png") # ax.imshow(im) # remove window frame fig.canvas.manager.window.overrideredirect(1) plt.get_current_fig_manager().window.wm_geometry(conf) plt.show() #drawRectangle('10','980') if __name__ == '__main__': fire.Fire(drawRectangle)
#默認在屏幕左上角生成一個400*400的黑屏 python drawRectangle.py #在左下角(0,980)生成一個128*72的紅屏 python drawRectangle.py 0 980 128 72 red
本文更新於 2018/07/23。
最近用python寫了個小服務,既然都用python寫了,不如順便用python的服務器來運行,簡單搜索後決定用Flask+uwsgi+nginx來實現。virtualenv的安裝就不多說了。
#新建一個python3虛擬環境emailApp mkdir pythons cd pythons virtualenv --python=/usr/local/bin/python3.5 emailApp source emailApp/bin/activate #安裝uwsgi和Flask pip install uwsgi Flask cd emailApp #新建emailApp1.py
#!/root/42/pythons/emailApp/bin/python # -*- coding: utf8 -*- from flask import Flask,request import json app = Flask(__name__) def getTS(): TS={} nowTS=int(time.time()) TS['当前时间戳']=str(nowTS) localTimeString=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(nowTS))) TS['服務器時間']=str(localTimeString) gmtTimeString=time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(int(nowTS))) TS['GMT時間']=str(gmtTimeString) localTSToday=int(time.mktime(time.strptime(localTimeString[:10], '%Y-%m-%d'))) TS['服務器今天時間戳']=str(localTSToday) print('服務器今天時間戳'+str(localTSToday)) TS['GMT今天時間戳']=str(localTSToday+time.timezone) return TS @app.route('/') def hello_world(): return 'Good luck!' @app.route('/taskCms/service/getTS') def checkTS(): TS = getTS() return json.dump(TS) if __name__ == '__main__': # app.debug = True # app.run(host='0.0.0.0',port=8080) app.run()
#此時執行 python emailApp1.py #即可在本地http://127.0.0.1:5000/訪問到服務了。 #Ctrl+C關閉測試,新建nginx站點配置文件emailApp.conf #nginx站點配置通常在/etc/nginx/conf.d
server { listen 8042; server_name 127.0.0.1; charset utf-8; location / { try_files $uri @yourapplication; } location @yourapplication { include uwsgi_params; uwsgi_pass 127.0.0.1:3031; } }
#測試nginx配置文件是否有誤 nginx -t #重新加載nginx nginx -s reload #此時訪問你的ip加端口號8042,出現502 Bad Gateway則證明nginx已配置好 #若出現訪問超時則可能是有防火牆阻擋 #接下來在項目目錄下新建config.ini作為uwsgi的配置文件
[uwsgi] socket = 127.0.0.1:3031 chdir = /root/42/pythons/emailApp master = true binary-path = /root/42/pythons/emailApp/bin/uwsgi virtualenv = /root/42/pythons/emailApp module = emailApp1:app processes = 2 threads = 4
#使用uwsgi運行Flask程序 /root/42/pythons/emailApp/bin/uwsgi --ini /root/42/pythons/emailApp/config.ini #如果遇到uwsgi: error while loading shared libraries: libpcre.so.1可嘗試 ln -s /usr/local/lib/libpcre.so.1 /lib64 #正常的話此時應該能通過8042訪問到服務
#開機啟動我使用的centos6自帶的Upstart nano /etc/init/uwsgi.conf
# simple uWSGI script description "uwsgi tiny instance" start on runlevel [2345] stop on runlevel [06] respawn exec /root/42/pythons/emailApp/bin/uwsgi --ini /root/42/pythons/emailApp/config.ini
最後可以通過screen執行uwsgi,然後退出服務器。這樣就完成了一個簡單Flask項目的搭建。Flask就是簡單快速。
如果是通過Upstart自動啟動的,可以通過initctl reload uwsgi和initctl restart uwsgi來重啟uwsgi。
Connection reset by peer鏈接被中斷
過了幾天發現接口不穩定,有時能正常返回數據,有時出現Connection reset by peer鏈接被中斷。從firebug里看發現數據返回有時是先返回個0,就是什麼也沒有然後真是數據才回來,這是瀏覽器已經報錯了。此時可嘗試在uwsgi配置中增加buffer-size=65535和post-buffering = 1。以及在nginx的conf中設置
http{ ... keepalive_timeout 0; uwsgi_read_timeout 86400; uwsgi_send_timeout 86400; .... }
本文更新於 2017/03/09。
意大利簽證中文官網里詳細的申請步驟、所需材料和所需材料格式(如保險單的要求),不必去旅遊網站亂搜。
條件方面簡單概括下要求就是要有一份穩定的工作和足以支付本次旅行的資金,行程單要認真寫。首次辦理申根簽證需要在簽證中心錄十指指紋,所以沒有錄過指紋的就不要想代辦了。辦理順序就是自己根據所需資料準備材料》去簽證中心遞交材料並錄指紋》等待大使館發回簽證到簽證中心》領取簽證。順便一提,夫妻通行也是和單個辦理是一樣的,各自準備自己的結婚證複印件,即使是相同的材料也都需要各有一份。
我們的簽證辦理的挺順利的,雖然中間接到電話調查有點怕怕,但還好順利出簽。電話調查的應對秘訣就是誠實。
…… 2/16/2017.(到簽證中心交材料錄指紋)
Visa application ref no. SHEZ/xxxxxx/xxx/xx is being processed at the Italy Embassy/Consulate on 2/17/2017.(材料送抵大使館)
Visa application ref no. SHEZ/xxxxxx/xxx/xx – Your application has been processed and is in transit to the Italy Visa Application Centre on 2/22/2017.(大使館處理完畢)
Visa application ref no. SHEZ/xxxxxx/xxx/xx – Your processed passport has been dispatched to the Italy Visa Application Centre on 2/24/2017 and is ready for collection.(簽證送抵簽證中心)
SQL Client是一個可以在安卓手機上鏈接MySQL數據庫的應用,界面挺漂亮。如果偶爾要用手機檢查一下數據庫的資料,那麼基本的查詢功能是可以滿足的,看介紹說還能導出cvs文件。不足之處也不多:1,無法通過ssh連接數據庫,只能通過數據庫的地址和端口連接。2,每條SQL都保存爲一條記錄,好像會產生很多記錄。一些複雜的操作還是通過JuiceSSH進服務器執行吧。
電腦上一直在用MySQL Workbench,感覺還可以。
過程略繁瑣,參考了Install OpenCV 3.0 and Python 3.4+ on Ubuntu。安裝完成可在python中import cv2.
#安裝依賴及工具 sudo apt-get install build-essential cmake git pkg-config sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get install libgtk2.0-dev sudo apt-get install libatlas-base-dev gfortran sudo apt-get install python3.5-dev
由於我已經有python3.5的virtualenv了,所以這里就不再說了,可以参考pip3为python3安装模块。
#啓動python3.5的環境 source ~/pythons/p35/bin/activate #安装numpy pip install numpy -i https://pypi.douban.com/simple/ #下載並解壓OpenCV,github我克隆不下拉 cd ~ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip unzip opencv.zip wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.2.0.zip unzip opencv_contrib.zip cd ~/opencv-3.2.0 mkdir build cd build #cmake中間如有終端,可參考錯誤提示直接從web下載相關文件放於提示位置 cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \ -D PYTHON_EXECUTABLE=~/pythons/p35/bin/python \ -D BUILD_EXAMPLES=ON .. #成功執行後要留意python3的環境是否正確應有類似如下字樣 -- Python 3: -- Interpreter: /home/42/pythons/p35/bin/python3 (ver 3.5.2) -- Libraries: /usr/lib/x86_64-linux-gnu/libpython3.5m.so (ver 3.5.2) -- numpy: /home/42/pythons/p35/lib/python3.5/site-packages/numpy/core/include (ver 1.12.0) -- packages path: lib/python3.5/site-packages -- -- Python (for build): /home/42/pythons/p35/bin/python3 #然後就可以編譯了 make -j$(nproc) #編譯完成後執行安裝 sudo make install sudo ldconfig #查看是否安裝成功 ls -l /usr/local/lib/python3.5/site-packages/ | grep cv2 #成功的話應該會有文件出現類似 -rw-r--r-- 1 root staff 3550256 2月 17 20:36 cv2.cpython-35m-x86_64-linux-gnu.so #把cv2關聯到python環境裏 cd ~/pythons/p35/lib/python3.5/site-packages/ ln -s /usr/local/lib/python3.5/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so cv2.so #查看是否可用 python >>> import cv2 >>> cv2.__version__ '3.2.0'