DOC Add documentation entry about file system access (#2420)

Co-authored-by: Roman Yurchak <rth.yurchak@gmail.com>
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Gyeongjae Choi 2022-05-04 19:43:34 +09:00 committed by GitHub
parent 9b4d4a7e15
commit 410c875e04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 0 deletions

49
docs/usage/file-system.md Normal file
View File

@ -0,0 +1,49 @@
(file-system)=
# Dealing with the file system
Pyodide includes a file system provided by Emscripten.
In JavaScript, the Pyodide file system can be accessed through {any}`pyodide.FS` which re-exports the [Emscripten File System API](https://emscripten.org/docs/api_reference/Filesystem-API.html#filesystem-api)
**Example: Reading from the file system**
```js
pyodide.runPython(`
with open("/hello.txt", "w") as fh:
fh.write("hello world!")
`);
let file = pyodide.FS.readFile("/hello.txt", { encoding: "utf8" });
console.log(file); // ==> "hello world!"
```
**Example: Writing to the file system**
```js
let data = "hello world!";
pyodide.FS.writeFile("/hello.txt", data, { encoding: "utf8" });
pyodide.runPython(`
with open("/hello.txt", "r") as fh:
data = fh.read()
print(data)
`);
```
## Mounting a file system
The default file system used in Pyodide is [MEMFS](https://emscripten.org/docs/api_reference/Filesystem-API.html#memfs),
which is a virtual in-memory file system. The data stored in MEMFS will be lost when the page is reloaded.
If you wish for files to persist, you can mount other file systems.
Other file systems provided by Emscripten are `IDBFS`, `NODEFS`, `PROXYFS`, `WORKERFS`.
Note that some filesystems can only be used in specific runtime environments.
See [Emscripten File System API](https://emscripten.org/docs/api_reference/Filesystem-API.html#filesystem-api) for more details.
For instance, to store data persistently between page reloads, one could mount
a folder with the
[IDBFS file system](https://emscripten.org/docs/api_reference/Filesystem-API.html#filesystem-api-idbfs)
```js
let mountDir = "/mnt";
pyodide.FS.mkdir(mountDir);
pyodide.FS.mount(pyodide.FS.filesystems.IDBFS, { root: "." }, mountDir);
```

View File

@ -120,4 +120,5 @@ For this same reason, installing Pyodide packages from the CDN is explicitly not
webworker.md
loading-custom-python-code.md
file-system.md
```