今天有个大佬告知用 Python 调用 nodejs 运行 js 脚本或代码 然后可以接收返回值 不知道咋实现

2018-02-20 20:23:08 +08:00
 jakeyfly

大佬们有没有了解相关方面的 给个示例看看 好像是用 subprocess.Popen 来弄的 但是弄半天没成功

9058 次点击
所在节点    问与答
20 条回复
messense
2018-02-20 21:12:33 +08:00
jakeyfly
2018-02-20 21:18:38 +08:00
@messense 大佬 这个包跟 pyexec 那个比怎么样
golmic
2018-02-20 21:20:44 +08:00
最简单的方案,node 写文件,python 读
jakeyfly
2018-02-20 21:27:27 +08:00
@golmic 是用于爬虫的 get Js 文件 返回回来的 想读取其中的变量值或者函数返回值 所以 能不能直接调用 node 跑 JS 或者 上面说的包
zbl430
2018-02-20 22:20:56 +08:00
pip install pyexecjs
golmic
2018-02-20 22:36:38 +08:00
@jakeyfly 小段代码用 execjs,大段代码直接 node 跑
ETiV
2018-02-20 23:47:57 +08:00
nodejs 里 console.log 输出“返回值”
python 里读这个子进程的 stdout 内容
jakeyfly
2018-02-20 23:50:02 +08:00
@ETiV 那是要先把请求回来的 JS 保存成文件吗 还是直接把 response 交给 nodejs 跑
jakeyfly
2018-02-20 23:50:40 +08:00
@golmic 大佬有 demo 借鉴一下不
ericls
2018-02-20 23:57:51 +08:00
nodejs --> stdout --> python

```
p = subprocess.run(['command'], stdout=subprocess.PIPE)
res = p.stdout
```
ETiV
2018-02-20 23:59:04 +08:00
哦 你是要下载别人的 js 运行
headless browser 了解一下…

nodejs 威力太大了,如果别人给你返回个删本地文件、或者开 ftp/shell 的 js 代码,就有趣了
jakeyfly
2018-02-21 00:20:25 +08:00
@ETiV 无端浏览器 不适合我 太慢了 谢谢大佬
jakeyfly
2018-02-21 00:22:19 +08:00
@ericls ['node','xx.js'] 老是提示我 文件或文件侠不存在 cwd=path 没有错 但是加上 shell=True 可以在终端上 python xxx.py 运行 不知道什么原因 晕了
tolbkni
2018-02-21 01:22:37 +08:00
@jakeyfly 提示是 node 不存在还是 xx.js 不存在?
zythum
2018-02-21 01:28:32 +08:00
@ETiV node 沙箱机制了解一下。 可以把执行代码拿出来当字符串用沙箱执行。require 不给他就行了。
ericls
2018-02-21 01:32:29 +08:00
@jakeyfly 如果你用相对路径 相对的是运行时的 cwd 而不是文件位置。 用 __file__ 组个绝对路径出来吧……

如果是 node 不存在可以在运行前用 sys 改 path
jakeyfly
2018-02-21 01:59:45 +08:00
@tolbkni 提示文件或目录不存在,然后后面跟着 node xxx.js 是否是 node 没有配置好的问题 我在 BASH 下运行是可以的就是 pycharm run 不行
jakeyfly
2018-02-21 02:14:22 +08:00
@ericls 路径 我犯了一个低级错误 解决了 现在问题是 打印打出来的好像不全 ... 155 more items 如何全部的呢
jakeyfly
2018-02-21 02:22:23 +08:00
还想请教一下 我这是要爬取别人的 JS 文件 运行后 提示其中的变量的值 比如 ARRAY 值 返回 PYTHON 用 现在不明白的地方有 1,用 node 返回值 是否只能这样流的形式通信 该怎么在请求的 js 文件里 加上 console.log 这样自己的代码,2,返回的好像是字符串,我刚才用 pyminirance 弄了一下 能直接获取数组之类 python 能用的数据类型。。。。这种用 NODE 跑的方式是不是不适合用来爬数据呀。。。。。。。
golmic
2018-02-21 10:12:16 +08:00
pydata.me 里面有模拟登录新浪微博的代码,用到了这个

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/431377

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX