список файлов с ADB, используя Python - PullRequest
1 голос
/ 16 июня 2020

У меня есть список файлов в каталоге на моем Android устройстве, который я хочу перечислить, однако мне нужны только файлы без точки (то есть - никаких скрытых файлов и файлов с явными расширениями).

Я могу сделать это на мобильном устройстве с помощью find:

find /mydir -type f -not -name *.*

И я могу сделать то же самое с adb с моего хоста (здесь мне нужно \" для защитить мое регулярное выражение)

adb shell find /mydir -type f -not -name \"*.*\"

Однако у меня нет способа заставить его работать в сценарии Python, запущенном с моего хоста. Я сделал следующее:

list_command = [
            'adb',
            'shell',
            'find',
            '/mydir'
            '-type',
            'f',
            '-not',
            '-name',
            r'\'*\.*\''
        ]
subprocess.check_output(list_command)
            .decode()
            .splitlines()

Он фактически дал мне все файлы, независимо от того, присутствует ли точка в пути. Как правильно запустить эту команду adb в Python?

1 Ответ

1 голос
/ 16 июня 2020

Поскольку вы по-прежнему передаете глобус, а не регулярное выражение, вам не следует избегать символов точки, используйте "'*.*'":

list_command = [
            'adb',
            'shell',
            'find',
            '/mydir'
            '-type',
            'f',
            '-not',
            '-name',
            "'*.*'"
        ]

Просто используйте его в одинарных кавычках. Обратите внимание, что вам не нужно экранировать одинарные кавычки в строковом литерале в двойных кавычках, "'*.*'" чище, чем соответствующий '\'*.*\'' строковый литерал в одинарных кавычках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...