我試圖用Python來控制終端。根據我發現的文檔,我應該可以使用Popen以stdin和stdout輸出運行終端命令。遺憾的是它不工作:無法讀寫adb shell
import subprocess
o = subprocess.Popen("adb shell",stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
#for line in o:
#print "I got",line
print o.communicate("ls /")
o.stdin.write("ls /")
o.stdin.flush()
print o.stdout.read()
print o.readline();
print o.communicate()
編輯 - 我試圖monkeyrunner相反,它似乎對這個任務作出,但不幸的是它失敗的錯誤:
>>> device.shell('su')
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] Error executing command: su
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice]com.android.ddmlib.ShellCommandUnresponsiveException
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:408)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.ddmlib.Device.executeShellCommand(Device.java:388)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.chimpchat.adb.AdbChimpDevice.shell(AdbChimpDevice.java:269)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.monkeyrunner.MonkeyDevice.shell(MonkeyDevice.java:217)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at java.lang.reflect.Method.invoke(Method.java:616)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:175)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.PyObject.__call__(PyObject.java:355)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.PyMethod.__call__(PyMethod.java:215)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.PyMethod.instancemethod___call__(PyMethod.java:221)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.PyMethod.__call__(PyMethod.java:206)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.PyObject.__call__(PyObject.java:397)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.PyObject.__call__(PyObject.java:401)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.pycode._pyx19.f$0(<stdin>:1)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.pycode._pyx19.call_function(<stdin>)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.PyTableCode.call(PyTableCode.java:165)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.PyCode.call(PyCode.java:18)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.Py.runCode(Py.java:1197)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.core.Py.exec(Py.java:1241)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:147)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.util.InteractiveInterpreter.runcode(InteractiveInterpreter.java:89)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.util.InteractiveInterpreter.runsource(InteractiveInterpreter.java:70)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.util.InteractiveInterpreter.runsource(InteractiveInterpreter.java:46)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.util.InteractiveConsole.push(InteractiveConsole.java:110)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.util.InteractiveConsole.interact(InteractiveConsole.java:90)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at org.python.util.InteractiveConsole.interact(InteractiveConsole.java:60)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.monkeyrunner.ScriptRunner.console(ScriptRunner.java:193)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.monkeyrunner.MonkeyRunnerStarter.run(MonkeyRunnerStarter.java:73)
120706 08:29:28.433:S [main] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.monkeyrunner.MonkeyRunnerStarter.main(MonkeyRunnerStarter.java:189)
嘗試'殼= TRUE',但未必是安全的可能你正在做的「獲得root權限」是錯誤的...... – JBernardo
你說得對,那是個愚蠢的例子。看到更新後的腳本,它至少以shell = True開始,但仍然不起作用。 – NoBugs
什麼不起作用?你有沒有嘗試過使用'.communicate'? – JBernardo