




















在使用python写爬虫时,有时需要逆向,解密,需要运行js代码,需要和python进行交互,在python中可以使用 PyExecJS 或 js2py,但是这两个只适合简单的js代码片段,有局限性,不如直接使用 subprocess 调用 node.js

下载完后,改一下安装位置,其余全部下一步安装即可
subprocess 基本原理subprocess 是Python的标准库,subprocess 模块允许 Python 启动新进程、连接到它们的输入 / 输出 / 错误管道,并获取返回码。核心函数是 subprocess.run()(Python 3.5+),简化了旧版 subprocess.Popen 的使用。
### demo.js
function test(a,b,c) {
return a+b+c
};
# 接受subprocess传来的参数
arg1 = process.argv.slice(2)[0]
arg2 = process.argv.slice(2)[1]
arg3 = process.argv.slice(2)[2]
console.log(test(arg1, arg2, arg3))
### main.py
import subprocess
arg1 = 'python'
arg2 = '调用'
arg3 = 'js'
js_result = subprocess.run(['node', 'demo.js', arg1, arg2, arg3],capture_output=True,text=True,encoding='utf8')
# 手动判断退出码
if js_result.returncode == 0:
print("标准输出:\n" ,js_result.stdout)
else:
print("错误输出:\n", js_result.stderr)
### 运行结果
标准输出:
python调用js
['node', 'demo.js', 'arg1', 'arg2', 'args3']: 命令和参数的列表。node 是命令,可以传node(会在系统变量中寻找node.exe),也可以传node.exe的所在路径,demo.js 是要执行的文件,arg1, arg2, arg3 是传递给 JS 脚本的参数,命令和参数的类型必须是字符串,否则报错。
capture_output=True: 捕获子进程的标准输出 (stdout) 和标准错误 (stderr)。而不是出错直接在控制台输出
text=True: 将捕获的输出从字节(bytes)解码为字符串(str)
check:
True:若子进程返回非零退出码(表示错误),自动抛出 CalledProcessError 异常。False(默认):不检查退出码,需手动判断 result.returncode。timeout:设置超时时间(秒),超时后终止子进程并抛出异常。
input:传递给子进程的输入内容(需配合 text=True 使用字符串,否则用 bytes)。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。