我想在ADB shell中发送命令,就像我在cmd中完成了以下操作一样。
>adb shell
shell@:/ <command>
我在Windows 7 OS 64bit机器上使用python 3.4。我只需使用subprocess.getoutput发送单行shell命令,例如:
subprocess.getoutput ('adb pull /storage/sdcard0/file.txt')
只要adb命令本身被ADB特别识别,例如pull和push,但是还有其他命令如grep需要在shell中运行,如上所述,因为它们不被adb识别。例如,以下行不起作用:
subprocess.getoutput ('adb shell ls -l | grep ...')
要在shell中输入命令,我认为我需要某种期望的库,因为这就是每个人&#39;但是,无论如何,我们都会看到,并且看起来并且葡萄酒都无法发挥作用。它们是为python 2编写的,在被移植到python 3之后,我手工浏览.py文件,即使是那些经过调整的窗口,也没有任何工作 - 每个都是出于不同的原因。
如何将我想要的输入直接发送到adb shell?
答案 0 :(得分:0)
如果已经推荐的快捷方式都不适合您,您仍然可以去常规快捷方式。使用&#39; subprocess.Popen&#39;使用Popen在 要记住一些事情: cmd1 = 'adb shell'
cmd2 = 'ls -l | grep ...'
p = subprocess.Popen(cmd1.split(), stdin=PIPE)
time.sleep(1)
p.stdin.write(cmd2.encode('utf-8'))
p.stdin.write('\n'.encode('utf-8'))
p.stdin.flush()
time.sleep(3)
p.kill()
答案 1 :(得分:0)
Amichai,我必须首先指出你自己的&#34;解决方案&#34;太可怕了。你的解释使情况变得更糟。只是因为你不理解shell(这里我的意思是你的PC的操作系统shell,而不是adb
)命令解析,所以做了所有这些不必要的事情。
当你需要的只是这一个命令时:
subprocess.check_output(['adb', 'shell', 'ls /storage/sdcard0 | grep ...']).decode('utf-8')