如何使用python

时间:2016-07-21 05:20:30

标签: android python shell adb

我正在尝试使用subprocess.Popen

在python中执行adb shell命令

示例:需要在adb shell中执行'command'。在手动执行时,我打开命令窗口并执行如下操作。

>adb shell
#<command>

在Python中我使用如下,但过程被卡住并且不提供输出

subprocess.Popen('adb shell <command>)

尝试在命令窗口中手动执行,与python代码相同,卡住并且不提供输出

>adb shell <command>

我正在尝试在后台执行二进制文件(在命令中使用二进制文件名后跟&amp;)。

3 个答案:

答案 0 :(得分:5)

使用子进程模块中的communic()方法找到了一种方法

procId = subprocess.Popen('adb shell', stdin = subprocess.PIPE)
procId.communicate('command1\ncommand2\nexit\n')

答案 1 :(得分:0)

使用pexpect(valueFactory

adb="/Users/lishaokai/Library/Android/sdk/platform-tools/adb"
import pexpect
import sys, os
child = pexpect.spawn(adb + " shell")
child.logfile_send = sys.stdout

while True:
  index = child.expect(["$","@",pexpect.TIMEOUT])
  print index
  child.sendline("ls /storage/emulated/0/")
  index = child.expect(["huoshan","google",pexpect.TIMEOUT])
  print index, child.before, child.after
  break

答案 2 :(得分:-1)

Ankur Kabra,请尝试以下代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess
command = 'adb devices'
p = subprocess.Popen(command, shell=True,
                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
print 'standard output: %s \n error output: %s \n',(stdout,stderr)

您将看到错误输出。

通常它会告诉你:

 /bin/sh: adb: command not found

这意味着,shell无法执行adb命令。 因此,将adb添加到PATH或撰写adb的完整路径将解决问题。

可能有所帮助。