なんとかブラウザで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"
chromedevtoolsコンソールのすべての出力。
ルートフォルダに作成されます。しかし、ファイルエクスプローラーで、またはとにかくファイルをダウンロードフォルダーにコピーするためにどのようにアクセスできますか?
ありがとう
実際、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が最初に解決されることに依存しているため、残念ながらこれは機能しません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加