TypeError: a bytes-like object is required, not 'str'
因此建议在3.8以上版本直接使用subprocess.Popen
方法调用js,但需要注意的是通过python调用的js文件返回值最后都会默认加个'\n'
,也及时空格符,需要手动替换。
在Pyhton中用os.open调用nodejs执行结果一、为什么要用os.open?二、使用方法1、js文件编译2、Python调用一、为什么要用os.open?在不安装第三方js执行库的情况下,直接用Python原生os库来执行js代码不失为一种比较便捷的方法,尤其是js文件比较大的时,直接以字符串形式写在Python代码里通过其他库(execjs等)来执行会显得代码异常臃肿,而且不存在第三方库因为无法正确编译js文件导致执行报错的问题,总之使用os.open时,只要js代码在nodejs环境里能正
的 Python 端口,JavaScript 解析器。
为什么我不应该使用它?
它非常慢——解析 116k JS 文件大约慢两个数量级。 代码是从 JavaScript 半自动翻译过来的,它做了很多字符串附加,这在 JS 中很快,但在 Python 中很慢。
我为什么要使用它?
转而使用 NodeJS 进程可能是从 Python 中使用 Esprima 的更好方法。 但是,编写进程间数据封送处理代码有点烦人,因此如果您想对少量数据进行快速破解,PyEsprima 是开始做生意的好方法。 API 几乎完全相同,因此您可以在稍后轻松交换到外部 Node 进程的接口。
此外,由于代码是使用半自动翻译的,因此更容易保持最新状态,因此位腐烂不是问题。
最后,您会很高兴知道原始 Esprima 中的所有相关测试都通过了。
应用程序接口
除了我们对 RegExp 的处理之外
一、环境搭建:安装 Node.js + Cnpm + Express + Body-parser
【Node.js 】是运行在服务端的 JavaScript,它基于Google的V8引擎的
安装Node:官网https://nodejs.org/zh-cn/
npm(node package manager):nodejs自带的包管理器,用于node插件管理(包括安装、卸载、管理依赖等)【C...
有时候我们需要借助 nodejs 的一些包独特的性能,但是又要在 Python 环境中调用。
目前网上最流行的有三种( pyexecjs、pyv8、js2py )让 Python 调用 nodejs 的依赖库,但他们都有很大的问题,不建议使用。
不建议的原因
pyexecjs
乍一看作者还在维护,其实作者已经表示这个库要没了,EOL 不在维护了:
可谓是年久失修,运行简单的代码还可以苟延残喘,实测稍微带新特性的复杂脚本是运行不了的,即使 babel 做过兼容的也不行。
pyv8 更可怕,
写某自动化脚本时某学校统一认证系统 CAS (Central Authentication Service) 登录时采用了 js 对用户名和密码进行前端加密。
大致就是这么个东西:(╯°□°)╯︵ ┻━┻
因为比较着急用这个自动化程序,所以暂时不打算研究这段 867 行的代码。
PyExecJS
在 Python 中使用本地 js 环境运行代码。
虽然目前已经停止更新维护了,不过还能用。
pip install PyExecJS
import execjs
context = e
方式一:PyExecJS
PyExecJS 是使用最多的一种方式,底层实现方式是:在本地 JS 环境下运行 JS 代码
支持的 JS 环境包含:Node.js、PyV8、PhantomJS、Nashorn 等
首先,我们需要安装依赖包 PyExecJS
//py_exec_js_demo.py
//安装依赖
pip3 install PyExecJS
然后,从 JS 文件中读取源码
def js_from_file(file_name):
读取js文件
:return:
with open(
Python简介
Boa是Pipcook中的Python桥接层,它使您可以在Node.js中无缝调用Python函数,它为Node.js开发人员提供了成本更低的学习或使用Python的任何模块。
从npm安装Boa:
$ npm install @pipcook/boa
让我们看一下如何调用Python函数:
const boa = require ( '@pipcook/boa' ) ;
const os = boa . import ( 'os' ) ;
console . log ( os . getpid ( ) ) ; // prints the pid from python.
// using keyword arguments namely `kwargs`
os . makedirs ( '..' , boa . kwargs ( {
mode : 0
js-fire是一个用于从大多数js对象自动生成命令行界面(CLI)的库。
js Fire是在js中创建CLI的简单方法。
js Fire可帮助您探索现有代码或将其他人的代码转换为CLI。
js Fire使Bash和js之间的转换更加容易。
yarn add js-fire
npm install js-fire
js-fire同时作为和公开。
API用法
您可以在任何函数和对象上调用Fire :
这是在对象上调用Fire的示例,您可以无限嵌套对象以创建子命令。
const fire = require ( 'js-fire' )
const calculator = {
__description__ : 'I am a math machine' ,
double : number => {
// I double things
return 2 * number
add : ( n1 = Math . PI , n2 ) => {
return n1 + n2