如何通过Python执行Node.js脚本并获取其返回输出?
Python调用Node.js脚本后处理返回输出方案
嘿,咱们来解决你用Python执行Node.js脚本后处理返回输出的问题。现在你拿到的是字节串(比如b'{"1":[]...}'),得把它转成Python能直接用的数据结构才行,具体步骤如下:
你的现有代码
Node.js脚本(b.js)
const data = { "1":[], "2":[], "3":[], "4":[], "5":[], "6":[], "7":[], "8":[], "9":[], "10":[], "11":[{"id":"1","domain":"www.xxxxx.com","keywords":"白银交易平台","type":"Type1","time":["11","14","15","18"]}] }; console.log(JSON.stringify(data));
(注:给原脚本补上了const声明,符合Node.js的语法规范)
Python脚本片段(a.py)
if response.exitcode == 0: print(response.stdout) else: sys.stderr.write(response.stderr)
优化后的解决方案
现在response.stdout是字节类型,你需要先解码成字符串,再用json.loads()转换成Python字典,这样就能正常操作数据了。修改后的Python代码如下:
import json import sys # 假设response是subprocess.run()的返回结果 if response.exitcode == 0: # 1. 把字节串解码为UTF-8字符串,同时去除首尾的换行/空格 output_str = response.stdout.decode('utf-8').strip() # 2. 将字符串解析为Python字典 data_dict = json.loads(output_str) # 示例:打印11对应的数组内容 print("解析后的11字段内容:", data_dict["11"]) else: # 错误输出同样需要解码成字符串 sys.stderr.write(response.stderr.decode('utf-8'))
关键细节说明
- 解码字节串:subprocess模块返回的stdout/stderr默认是
bytes类型,必须转成字符串才能被JSON解析器处理,一般用utf-8编码即可,如果你的脚本有特殊编码可以调整。 - 去除冗余字符:
.strip()能去掉输出前后的换行符、空格,避免因为这些额外字符导致JSON解析失败。 - 错误处理(可选):如果担心JSON解析出错,可以加个try-except块捕获
json.JSONDecodeError,比如:try: data_dict = json.loads(output_str) except json.JSONDecodeError as e: print(f"JSON解析失败: {e}")
内容的提问来源于stack exchange,提问作者Ekoar
相关产品推荐
相关产品推荐

