Python Subprocess命令总是找不到

Kate 2020-11-12 23:10:02

adb 发送问题已解决 Mark

总是使用命令却不得法,为什么?

唯有细细看官方的文档和不断进行搜索,耐心地思考!

每一个关键字参数代表的是什么意思?不能随便用,要根据不同的场景,从而进行思考,对不同的方法进行不同的系统进行论证,最好是找到两种方式进行对比,就有细节可寻可以验证。

1.问题代码:

import subprocess
def runcmd(command):
    ret = subprocess.run(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8",timeout=1)
    if ret.returncode == 0:
        print("success:",ret)
    else:
        print("error:",ret)


runcmd(["dir","/b"])#序列参数
runcmd("exit 1")#字符串参数



import time
import subprocess

def cmd(command):
    subp = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8")
    subp.wait(2)
    if subp.poll() == 0:
        print(subp.communicate()[1])
    else:
        print("失败")



cmd("java -version")
cmd("exit 1")

一不,小心,就被糊弄了,这种方式在window下执行不了,也会报错;

其原因是 shell:如果该参数为 True,将通过操作系统的 shell 执行指定的命令。

2.解决的方法:

删除shell=True

发送命令有两种方法,一种为popen管道,另外的是os.system

3.原因分析:

程序在window的系统上跑,并没有配置任何关于shell的命令,一般使用的是cmd.exe;

检查已经存在adb相关的命令;

Last updated

Was this helpful?