動態內容_如何使用PyV8取得
由於環境上的需求,上一次在安裝PyV8之後,
整個Python版本都重新安裝了!
本篇內容在回復環境後,
就正式進入重頭戲(做了那麼多前置作業就是為了拿URL啊!!)
行進方向為->PyV8使用->觀察原js檔->實際取得URL
回復先前環境
從pip開始,再照著之前需要的模組重新下載。
- 安裝pip
- 下載 https://bootstrap.pypa.io/get-pip.py
- Python get-pip.py
Upgrade
- python -m pip install --upgrade pip
安裝Jupyter前先確認版本問題,
官方聲明:
Python is a requirement (Python 3.3 or greater, or Python 2.7)
Python官方手動版支援3.4
https://pypi.python.org/pypi/jupyter
https://pypi.python.org/pypi/jupyter
在我使用pip install jupyter的時候
下載了jupyter1.0.0 (不知道這是不是只支援Py3.4)
總之 後來就出現缺少MS SDK的報錯
遵照指示去了網址
下載套件
發現要花很久時間,還很佔空間ˊ~ˋ
據說有其他版本的visual studio只要環境變數設置完還是可以替代的...
據說有其他版本的visual studio只要環境變數設置完還是可以替代的...
去網路上查了發現有不少其他解法:
A.
Download numpy
Python setup.py build
Python setup.py install
Python setup.py build
Python setup.py install
B.
pip install ephem
(我先前CMD回報紀錄有看到需求ephem34,直覺告訴我攪和下去會沒完沒了
永無止境的版本問題,良心建議還是乖乖用2.7比較划算)
總之其他必要的模組安裝完畢之後,
我決定先往下進行。
好了!終於要開始使用PyV8!
現在有點小激動(肚子好餓…
前言
基本上PyV8是將V8的C++模組裡用boost轉接python進而成為python模組
Boost python教學: http://edyfox.codecarver.org/html/boost_python.html
native導出-->_PyV8.pyd,被import進-->再包裝PyV8.py -->開始使用
-------------------------------------------------------------------------------------
所以接下來,就來研究V8有哪些東西(API)可以用
V8 引擎要怎麼用? 原文參考來源
- Context :
你可以把 context 當成一個 Instance,裡面有包含原始的 object , properties 等,簡單的說, context 預設就像是 Javasceipt 的 window , 當 JS 直接對外部變數修改,而沒有宣告 local variable ,這時 context 的內容就會被更改,每個 Context 都要有一個 context scope ,就是為了 Garbage 管理 ,在之後的 v8 engine 語法中,常會見到 scope 這個名稱,幾乎所有的 v8 engine object ,都必需存放在scope中。(宣告的時候也使用了Persistent-->
)
- Persistent<Context> context;
- context = Context::New();
- Handle :
Handle是各種物件的reference,有自動的 GC (Garbage Collector) 處理,在 Google V8 Engine中,幾乎所有的變數都會宣告在 Handle裡,統一由Handle來管理。Handle 又分兩種類型, Local 與 Persistent ,這兩個其實也不難, Local Handle 的生命週期是由 HandleScope來控制,當變數不再被使用的時候,就會自動被GC給處理掉,Persistent Handle則是由工程師可自已控制,當不需要使用時,要手動 delete memory allocate 。(Persistent表示持續、堅持,有持續存在之意-->所以是由使用者來管理他,也就是只要使用者保留他,他就能一直存在。)
- HandelScope :
HandleScope 就是代表著 Handle 存在的區域,也可以說是 Handle的家,你必需先建立 HandleScope ,接著才能建立 Handle,不然 Handle可是會找不到家的喔。HandleScope 會自動管理 Handle的生命週期,當HandleScope結束掉,家裡所有的 Handle 也會被清空。
- 同時宣告兩個以上的 HandleScope , 後面的HandleScope取代第一個HandleScope的所有功能,等於 Handle 有了兩個家,這時只要有一個 HandleScope存在, Handle就不會被清除。
也就是在使用時,需要先new一個實例context代表這個環境本體,(也就記錄了環境與變動),接著為了更好管理環境裡物件的變化生命周期等,我們需要建立handle,然後管理handle的就是handelscope,作為handle的家來使用。
-------------------------------------------------------------------------------------
2. 基本使用
Function .enter() 先進入
Function .eval (評估 賦值cntent)如右圖-->可以將.JS內容直接傳入
A.
txt=open('jshello.js','r').read()
func = ctxt.eval(txt)
B.3. 互相調用 http://www.bkjia.com/Pythonjc/618182.html
func = ctxt.eval("""( function(){ 'there' } )""")ctxt.eval("""var t; function a(){ 'there' } """)Function .leave() 離開 http://nullege.com/codes/search/PyV8.JSContext.eval
主要是使用.locals來取出變數物件們
在python更改變數值 (可以知道是拿到變數reference)
所以可以做到變數互相調用。
留言
張貼留言