Запустите команды adb pipe в python - PullRequest
0 голосов
/ 19 декабря 2018

Я пытался запустить команду adb ниже через скрипт python:

'ls -1r | grep -m1 house | xargs tail -n2'

обратите внимание, что перед этой строкой я уже перешел к нужному каталогу в оболочке adb и вручнуюПротестировал команду, она работала как положено.После некоторых исследований я предпринял следующие попытки:

Использование getoutput:

output = commands.getoutput('ls -1r | grep -m1 house | xargs tail -n2')

Использование Popen:

args0 = ['ls','-1r']
args1 = ['grep','-m1','house']
args2 = ['xargs','tail','-n2']
p0 = Popen(args0, shell=True, stdout=PIPE,stderr=PIPE)
p1 = Popen(args1, shell=True,stdin=p0.stdout, stdout=PIPE,stderr=PIPE)
p2 = Popen(args2, shell=True, stdin=p1.stdout,stdout=PIPE,stderr=PIPE)
(output,stderr) = p2.communicate()

Но вывод / stderr либо NONE или ''.Я также пытался удалить shell=True или поставить p0.stdout.close() перед строкой connect (), также ничего не делает.

Не уверен, почему он не работает, любая помощь приветствуется!

1 Ответ

0 голосов
/ 19 декабря 2018

Вы можете запускать команды adb через подпроцесс.Убедитесь, что цепочка команд действительна

subprocess.check_output(["adb", "shell", "ls -1r | grep -m1 house | xargs tail -n2"])
...