python - 如何在浏览器中复制/下载在 Pyodide 中创建的文件?
问题描述
我设法在浏览器中运行 Pyodide。我创建了hello.txt
文件。但是我怎样才能访问它。
Pyodide
https://github.com/iodide-project/pyodide/blob/master/docs/using_pyodide_from_javascript.md
pyodide.runPython('open("hello.txt", "w")')
我在 chrome devtools 中尝试了什么?
pyodide.runPython('os.chdir("../")')
pyodide.runPython('os.listdir()')
pyodide.runPython('os.path.realpath("hello.txt")')
输出为listdir
["hello.txt", "lib", "proc", "dev", "home", "tmp"]
输出为realpath
"/hello.txt"
还,
pyodide.runPython('import platform')
pyodide.runPython('platform.platform()')
输出
"Emscripten-1.0-x86-JS-32bit"
chrome devtools 控制台中的所有输出。
它是在根文件夹中创建的。但是如何在文件资源管理器中访问它或将文件复制到下载文件夹?
谢谢
解决方案
事实上,pyodide 在Emscripten 创建的内存 (MEMFS) 文件系统中运行。您不能直接从 pyodide 将文件写入磁盘,因为它是在浏览器沙箱中执行的。
但是,您可以将文件传递给 JavaScript,从中创建一个Blob,然后下载它。例如,使用,
let txt = pyodide.runPython(`
with open('/test.txt', 'rt') as fh:
txt = fh.read()
txt
`);
const blob = new Blob([txt], {type : 'application/text'});
let url = window.URL.createObjectURL(blob);
window.location.assign(url);
使用pyodide中包含的类型转换,也应该可以从Python端完成所有这些操作,即
from js import Blob, document
from js import window
with open('/test.txt', 'rt') as fh:
txt = fh.read()
blob = Blob.new([txt], {type : 'application/text'})
url = window.URL.createObjectURL(blob)
window.location.assign(url)
但是目前,不幸的是,这不起作用,因为它取决于 首先解决pyodide#788。
推荐阅读
- reactjs - kepler.gl 状态不存在。您可能忘记在根减速器中安装 keplerGlReducer
- ios - audioPlayerDidFinishPlaying:成功:未调用
- javascript - 如何在 ReactJS 中使用加载图标更改步数
- email - Ballerina:如何连接 SMTP 服务器并发送电子邮件?
- android - 无法在 gradle 文件中应用“android-reporting”
- python - 使用父属性和覆盖的子属性进行继承
- mysql - mysql形成子数组(数组聚合)并返回
- excel - 从外部数据向现有表添加新行且不重复
- tcp - HAProxy - TCP 模式下基于 Client CN 的 ACL
- html - 如何使用线性渐变添加多个背景图像?