Python 執行js指令碼

2021-09-26 05:43:18 字數 2021 閱讀 8483

max.bai

2019-08

需要用python執行mockjs 來生產模擬資料。

當然有其他辦法,這個確實比較繞,暫且不討論,主要關注python執行js。

execjs 或者pyv8   pyton呼叫js的庫,execjs穩定點,pyv8經常報錯,但效能好點(或許是我姿勢不對)

nodejs 用來執行js的引擎

mockjs  js庫

**確實太少了,就直接上了,注釋部分為pyv8用法

# ! python3

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

import os

import execjs

# import pyv8

if os.name == 'nt':

else:

os.environ["node_path"] = "/usr/local/nodejs/lib/node_modules" #for centos

mockjs_path = '/usr/local/nodejs/lib/node_modules/mockjs/dist/mock.js'

# os.environ["execjs_runtime"] = "jscript"

os.environ["execjs_runtime"] = "node"

print(execjs.get().name)

class mockjs():

# if os.name == 'nt':

# mockjsobject = execjs.compile("var mock = require('mockjs');")

# else:

# import pyv8

# mockjsobject = pyv8.jscontext()

# mockjsobject.enter()

# mockjsobject.eval(open(mockjs_path, 'r', encoding='utf-8').read())

mockjsobject = execjs.compile("var mock = require('mockjs');")

@classmethod

def mock(cls, tdata):

template = '''

var tt = {}

mockresult = mock.mock(tt)

if (typeof(mockresult) == "object") }

'''.format(tdata)

# print(template)

# if os.name == 'nt':

# template += 'return mockresult'

# return cls.mockjsobject.exec_(template)

# else:

# template += 'mockresult'

# return cls.mockjsobject.eval(template)

template += 'return mockresult'

return cls.mockjsobject.exec_(template)

if __name__ == "__main__":

tdata = '''

, "fuction2": function(), "rgg2|1-5": [/[a-z][a-z][0-9]/], "f3|1-5": [function()], "r3": , "f4": }}

''' #mockjs 模板 格式參考mockjs官網

import time

time1 = time.time()

for i in range(1):

print(i, mockjs.mock(tdata)[:10])

print(time.time() - time1)

前面說了也有其他辦法實現,比如下面這些python庫:

執行python指令碼

linux有下列的幾種方法來執行python指令碼 注 我所用的python環境為 2.6 一.終端命令列下 python name.py 二.python環境中 若指令碼名稱為name.py,其內容為 a head b hehe print a,b 則使用 impport name 針對此種方法我...

執行python指令碼後台執行

加了 以後可以使指令碼在後台執行,這樣的話你就可以繼續工作了。但是有乙個問題就是你關閉終端連線後,指令碼會停止執行 python3 run.py dev null 2 1 nohup python3 run.py dev null 2 1 注意print有輸出緩衝,使用 u引數,使得python不啟...

執行python指令碼後台執行

在linux中,可以使用nohup將指令碼放置後台執行,如下 nohup python myscript.py params1 nohup.out 2 1 但直接使用上面 無法在程式執行過程中檢視python中的print computing 輸出結果,比如在每次迴圈中使用print語句等。原因是p...