node調用python
1. 為什麼用python獲取mac地址會變動
首先聲明,我本人還沒有研究出來問題的究竟。此處只是寫下我本人的一點小心得,大家一起進步。
因為我發現,使用uuid庫得到的mac地址,總有最後一位不對。所以,我就查看了python官方的uuid文檔,找到了問題的關鍵是調用UUID()的時候,會調用getnode()函數以得到物理地址。
這個是getnode()函數的定義:
我把它摘出來,考到下面。
def getnode(*, getters=None):
"""Get the hardware address as a 48-bit positive integer.
The first time this runs, it may launch a separate program, which could
be quite slow. If all attempts to obtain the hardware address fail, we
choose a random 48-bit number with its eighth bit set to 1 as recommended
in RFC 4122.
"""
global _node
if _node is not None:
return _node
if sys.platform == 'win32':
getters = _NODE_GETTERS_WIN32
else:
getters = _NODE_GETTERS_UNIX
for getter in getters + [_random_getnode]:
try:
_node = getter()
except:
continue
if (_node is not None) and (0 <= _node < (1 << 48)):
return _node
assert False, '_random_getnode() returned invalid value: {}'.format(_node)
我正在試圖通過研究這個問題來試圖研究。但同樣,我覺得我們可以直接讓python調用系統庫,從而執行系統自帶的命令:(類似於windows下cmd裡面"ipconfig -all"命令,或者ubuntu下terminal中"ifconfig"命令)。實現物理地址。之後,根據「短時間內該機器的網卡不會出現過大的變動這個前提」,我們可以根據返回內容,切片出我們需要的部分即可。
2. nodejs 還是python
簡短的回答,這取決於你的情況。繼續閱讀以確定Django或Node是否更適合您的後端應用程序。
Node.js(GitHub上的55,432★)和Django(GitHub上的37,614★ )是構建Web應用程序的兩個強大工具。
Node.js有一個「JavaScript無處不在」的動機,以確保在Web應用程序的伺服器端和客戶端使用JavaScript,Django有一個「完美主義者框架,有最後期限」的動機,以幫助開發人員快速構建應用程序。
它們正在許多大型項目中實施,它們擁有龐大的用戶社區,並且正在定期升級。這兩種工具的質量使開發人員對於為他們的項目選擇哪種工具感到困惑。本文旨在清除空氣並幫助您做出決定。
Node.js
JavaScript的主要優勢在於它在客戶端開發方面的優勢,但Node.js正在通過在伺服器端創建奇跡來完全相反。
Node是一個開源JavaScript運行時環境,用C,C ++和JavaScript編寫,構建於Google V8 JavaScript引擎上,並於2009年發布.Node.js基於事件驅動的非阻塞I / O模型。
可以使用Windows Installer在Windows上安裝節點。安裝很簡單,只需按照從官方網站下載安裝程序後的提示即可完成。
可以從Windows命令提示符或PowerShell確認成功安裝:
node-v
對於linux(Ubuntu)用戶,可以從終端安裝Node.js:
sudo apt-get updatsudo apt-get install nodejssudo apt-get install npm
可以在終端上通過以下方式確認在Linux(Ubuntu)上的成功安裝:
nodejs-v
Node Package Manager(npm)用於安裝與Node.js一起使用的包。
優點
偉大圖書館的可用性。高性能。非常適合構建API。它有一個很棒的包管理器。龐大的用戶社區。輕松處理並發請求。缺點
非同步編程可能難以使用。由於其單線程,CPU密集型應用程序不是很好。回調導致大量嵌套回調。Django
Django是一個非常強大的開源Python Web框架。它是非常高級的,因為大多數低級別的東西都被抽象出來了。眾所周知,它具有「包含電池」的理念,因此它可以開箱即用。
Django可以實現快速開發項目,對於已經了解Python的人來說,它是初學友好的。
Django是以實用和干凈的設計為基礎構建的,並且具有構建復雜Web應用程序所需的所有主要組件。
安裝非常簡單,可以使用Python的包管理工具(稱為pip)完成。如果安裝了pip,則從終端開始,以下命令是Windows和Linux操作系統所需的全部操作。
pip install django
要確認其安裝,只需激活Python shell並導入Django。在終端中鍵入「python」,如:
python
得到類似的東西:
Python 3.6.6 (default, Sep 12 2018, 18:26:19)[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linuxType "help", "right", "credits" or "license" for more information.>>>
然後使用以下方法導入Django:
importdjango
如果沒有錯誤,那麼一切正常。
優點
幾乎沒有安全漏洞。適用於關系資料庫。簡單易學。快速的發展過程。非常可擴展。龐大的用戶社區。有很棒的文檔。缺點
Django是單片的,即單層軟體應用程序。對於小規模的應用來說並不是很好。需要充分了解該框架。兩者都是開源的
Node.js和Django都可以免費使用。使用商業軟體時,您不會遇到任何許可問題。它們也是開源的,因此當您發現要處理的功能或錯誤時,您可以為項目做出貢獻。
查看Node.js 存儲庫和Django 存儲庫。
學習曲線
Node.js是一個從客戶端瀏覽器環境中取出的JavaScript運行時,Django是一個Python框架。為了能夠學習這兩種工具,您需要熟悉使用他們的主要編程語言。
要使用Node.js,您需要了解非同步編程,Node的本機方法和體系結構。
Node.js有很多在線教程,但是很多例子都很糟糕,這可能會讓學習變得更加困難。
要使用Django,需要了解這些方法以及開箱即用的功能。還需要了解框架的MTV(模型模板視圖)架構的完整理解。
雖然Django在網上有很多很好的教程,但你會發現有大量過時的教程教授舊的做事方式。
雖然學習Node.js和Django需要了解他們的基礎語言,但Node引入了一些復雜的概念,這使得初學者與Django相比有點困難。
語法
Node.js只是在客戶端瀏覽器環境之外的JavaScript。因此,它的語法更像是常規的JavaScript語法。
這是Node.js中的「hello world」應用程序:
var http = require('http');http.createServer(function (req, res) res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World!');}).listen(8080);
Django是基於Python構建的,因此它也使用Python語法。Python中的「Hello world!」就是:
print(「HelloWorld」)
但是,由於Django是一個框架,它強制您使用一個標識MTV模式的特定結構,因此我們需要編寫不同的腳本來在Web應用程序上生成「Hello World」。
以下是Hello World的基本views.py文件:
from django.http import HttpResponsedef hello(request):return HttpResponse("Hello world")
這是urls.py文件:
from django.conf.urlsimport include, urlfrom django.contribimport adminfrom mysite.viewsimport hellourlpatterns = [url(r '^admin/', include(admin.site.urls)),url(r '^hello/, hello),]
可擴展性和性能
這兩種工具都具有很好的可擴展性和性能 然而,雖然Django似乎具有可擴展性的優勢,但Node.js具有性能優勢。
可以使用群集模塊使用負載均衡器克隆應用程序工作負載的不同實例來擴展Node.js應用程序。但是由於Node.js使用單線程,它在CPU密集型條件下表現不佳。
Django具有高度可擴展性,因為應用程序的緩存非常簡單,可以使用MemCache等工具完成。NGINX還可用於確保提供壓縮的靜態資產,並且即使數據變得更加健壯,它也可用於成功處理數據遷移。
用戶社區
Node.js和Django都有大型用戶社區。這樣做的主要因素是開發人員利用伺服器端的JavaScript風格來處理Node.js的Web應用程序的後端,並利用Python易於使用的Django語法。與Django相比,網上有許多與網路相關的教程,有更多的公司將Node作為他們的後端網路技術。
Uber,Twitter,eBay,Netflix,DuckDuckGo,PayPal,LinkedIn,Trello,PayPal,Mozilla和GoDaddy都是使用Node.js作為後端技術的大牌。
Pinterest,Instagram,Eventbrite,Sentry,Zapier,Dropbox,Spotify和YouTube也是使用Django作為後端技術的一些大牌。
結論
這兩種工具都非常適合構建Web應用程序,但是,每種工具都很突出。
例如,當您考慮使用關系資料庫,許多外部庫,將安全性作為列表中的最高優先順序,並且需要快速構建應用程序時,Django是一個很好的選擇。當您從伺服器獲得非同步堆棧時需要使用Node.js,需要很好的性能,打算從頭開始構建功能,並希望有一個應用程序來完成客戶端處理的繁重工作。
選擇最適合您需求的工具,這兩種工具對Web開發都很有用。
3. Node.js 與 Python 作為後端服務的編程語言各有什麼優劣
Node.js > Python 的地方
快:這個快有兩方面,第一是V8引擎快,在V8引擎背後操刀的是Lars Bak大神,他創造過高性能SmallTalk引擎和Java Hotspot引擎(現在Java的默認VM),他帶領下的V8引擎讓Javascript速度達到了一個新的階段。第二是非同步執行,Node.js功能上是一個基於V8引擎的非同步網路和IO Library,和Python的Twisted很像,不同的是Node.js的event loop是很底層的深入在語言中的,可以想像成整個文件在執行的時候就在一個很大的event loop里。
npm:npm可以說是用起來最順手的package management了,npm作為Node.js的官方package management,匯集了整個社區最集中的資源。不像Python經歷過easy_install和pip,還有2to3的問題。
Windows支持:Node.js有微軟的加持,Windows基本被視為一等公民來支持,libuv已經可以很好的做到統一跨平台的API;而Python雖然也對Windows有官方的支持,但是總感覺是二等公民,時不時出些問題。
Python > Node.js 的地方
語言:就單純從語言的角度來說,Python寫起來要比Javascript舒服很多。Javascript設計本身有許多缺陷,畢竟當時設計的時候只是作為在瀏覽器中做一些簡單任務的script,所以代碼一旦龐大,維護還是有困難(不過Node.js的mole很大的改善了這個問題)。不過用Coffeescript可以很大的改善Javascript,幾乎可以和Python等同。
成熟:成熟包括語言本身已經成熟,還有Framework和ecosystem也很龐大。Node.js的絕大多數framework都很新,有的API一直在變,有的感覺已經不在維護,總之沒有一個像Django那種百足之蟲感覺的framework。Python的主流ORM SQLalchemy也很成熟。
Python 和 Node.js 很難分高下的地方
非同步Style:Node.js的非同步Style是CPS,也就是層層callback,基於event,和瀏覽器中的Javascript很像。CPS好處是讓熟悉瀏覽器Javascript的人能很快上手,學習難度也不大。缺點是邏輯一復雜,就變得很難維護,基本上需要通過async.js這種library,或者用promise。Python的非同步除了和Node.js很像的Twisted之外,也有基於coroutine的gevent,coroutine讓非同步代碼維護起來更容易,不過學習曲線陡。
應用場景:如果是一個CRUD的app,那麼想都不想直接是Python,Node.js本身不擅長CRUD的app(絕大多數Node.js都是直接裸在外面的,而不是有一個Nginx在前面,否則websocket就不能用了,不過新版nginx開始支持websocket),代碼又不好維護,而Python的WSGI很適合,成熟的stack也有很多。如果更偏向於real-time,比如一個chat room,那麼Node.js實現更容易。這兩個應用場景還是有差別的。
如果解決了您的問題請採納!
如果未解決請繼續追問!
4. Electron 框架中調用 Python 構建桌面應用
不同的語言、框架都有自己擅長的領域:Electron 基於 Chromium 和 Node.js 能以 Web 開發的模式打造桌面應用,開發用戶界面又快捷又簡單;Python 則在數據分析、自動化腳本等領域有非常多的應用。兩者的社區生態都十分強大,由兩者共同構建應用,在界面開發、功能、性能上能夠強強聯合;
為了簡單驗證技術可行性,我們來編寫一個 Demo:
目的:驗證 Electron 打造的桌面應用能夠調用 Python,思路是使用 RPC 或 HTTP 或 WebSocket 進行通信
Demo 功能:輸入 x、y 坐標,程序會移動滑鼠到屏幕的 x,y 位置(通過 python 庫 pyautogui 實現)
Demo 運行環境:MacOS、pyInstaller: 版本 4.5.1、python: 版本 3.9.7
源碼:-------- 項目源碼 --------
注意:移動滑鼠需要授予應用控制許可權,在 MacOS 下設置 偏好設置 -> 隱私 -> 輔助功能 -> 允許對應的應用。
技術棧:NodeJS、Electron、Python、aiohttp(HTTP、WebSocket)、pyautogui(控制滑鼠)
為了使 NodeJS 和 Python 能夠通信,Python 需要啟動一個本地通信服務,Demo 中 py/api.py 能夠啟動一個本地 HTTP 服務:
然後我們需要執行 Python 代碼以啟動服務,為了使 NodeJS 可以執行 Python,我們使用 pyinstaller 將 Python 打包成可執行文件:
Python 啟動了本地 HTTP 服務後,Chromium 和 Node.js 就可以通過請求的方式,與 python 連接通信了:
簡單來說三個步驟:
本項目只是一個驗證思路的 Demo,真的需要在項目上實踐,還需要考慮以下幾個點:
應該使用 RPC 通信而不是 HTTP 或者 WebSocket,Demo 使用 HTTP 只是搭建方便。實踐中在建立連接、保持連接、異常重連都需要編寫更多的邏輯來處理。為什麼 Demo 沒有使用 zerorpc? 這個庫已經 4 年沒有維護了,不兼容新版 NodeJS。
項目通過 pyinstaller 打包成可執行文件來調用 python。實際上其他能編譯為可執行文件的語言也一樣。還可以使用 WebAssembly 將其他語言編譯成 .wasm,在 NodeJS 中引入執行。
5. node-sass使用python2
可以使用
nodesass是一個庫,它將Node.js綁定到LibSass【流行樣式表預處理器Sass的C版本】,它允許用戶以令人難以置信的速度將【.scss】文件本地編譯為css,並通過連接中間件自動編譯。Sass是一種預處理器腳本語言,可以解釋或編譯成層疊樣式表(CSS)。