デバイスファイルの読み書き

ファイル読み書きインターフェースを使用すると、デバイスからファイルを簡単にアップロードまたはダウンロードできます。大きなファイルのダウンロードとアップロードをサポートしており、関連するインターフェースを使用してファイルをローカルまたはメモリにダウンロードしたり、メモリまたはローカルのファイルをデバイスにアップロードしたりできます。また、ファイルの削除、ファイル権限の変更、ファイル情報の取得などの機能も含まれています。 存在しない、または権限のないファイルを操作しようとすると、OSErrorFileNotFoundErrorのようなネイティブなPython例外が発生します。

ファイルをローカルにダウンロード

このインターフェースは、デバイス上のファイルをローカルにダウンロードできます。以下の例では、デバイス上のファイル /verity_key の内容を、現在のコンピュータの my_file.txt ファイルにダウンロードします。ダウンロードされたファイルは元の権限情報を保持しないことに注意してください。

d.download_file("/verity_key", "my_file.txt")
>>> d.download_file("/adb_keys", "my_file.txt")
name: "adb_keys"
path: "/adb_keys"
st_mode: 33188
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
st_size: 2202
>>> result = d.download_file("/adb_keys", "my_file.txt")
>>> print (result.st_mtime)
1230768000
>>> os.chmod("my_file.txt", result.st_mode)

ファイルをメモリにダウンロード

このインターフェースは、デバイス上のファイルをメモリにダウンロードできます(BytesIOを使用)。

from io import BytesIO
fd = BytesIO()

d.download_fd("/verity_key", fd)
print (fd.getvalue())

ファイルをディスクリプタにダウンロード

このインターフェースは、デバイス上のファイルをファイルディスクリプタにダウンロードできます。ファイルは wb バイナリモードで開く必要があることに注意してください。

fd = open("my_file.txt", "wb")
d.download_fd("/verity_key", fd)

ファイルをデバイスにアップロード

このインターフェースは、ローカルのファイルをデバイスにアップロードできます。例では、ローカルの 测试文件.txt をデバイスの /data/usr/file.txt ファイルにアップロードすることを意味します。アップロードされたファイルも元の権限情報を保持しません。

d.upload_file("测试文件.txt", "/data/usr/file.txt")
>>> d.upload_file("file.txt", "/data/usr/file.txt")
name: "file.txt"
path: "/data/usr/file.txt"
st_mode: 33184
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
>>> result = d.upload_file("file.txt", "/data/usr/file.txt")
>>> print (result.st_size)
0

メモリからファイルをアップロード

以下の例では、メモリ内のファイル内容をBytesIO経由でデバイスの /data/usr/file.txt ファイルにアップロードします。

from io import BytesIO
d.upload_fd(BytesIO(b"fileContent"), "/data/usr/file.txt")

ディスクリプタからファイルをアップロード

以下の例では、ローカルファイル myfile.txt の内容をfdディスクリプタ経由でデバイスの /data/usr/file.txt ファイルにアップロードします。ローカルファイルは rb バイナリモードで開く必要があることに注意してください。

fd = open("myfile.txt", "rb")
d.upload_fd(fd, "/data/usr/file.txt")

デバイスファイルを削除

このインターフェースは、デバイス上のファイルを削除するために使用します。

d.delete_file("/data/usr/file.txt")
>>> d.delete_file("/data/usr/file.txt")
True
>>> d.delete_file("/adb_keys")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
OSError: [Errno 30] Read-only file system

ファイル権限の変更

このインターフェースは、デバイス上のファイルの権限を変更するために使用します。

d.file_chmod("/data/usr/file.txt", mode=0o777)
>>> d.file_chmod("/data/usr/file.txt", mode=0o777)
name: "file.txt"
path: "/data/usr/file.txt"
st_mode: 33279
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
>>> result = d.file_chmod("/data/usr/file.txt", mode=0o777)
>>> print (oct(result.st_mode))
0o100777

ファイル情報の取得

このインターフェースは、デバイス上のファイルに関する情報を取得するために使用します。

d.file_stat("/data/usr/file.txt")
>>> d.file_stat("/data/usr/file.txt")
name: "file.txt"
path: "/data/usr/file.txt"
st_mode: 33279
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
>>> result = d.file_stat("/data/usr/file.txt")
>>> print (result.name)
'file.txt'