子进程.check_output未能执行命令,但在Windows中相同的命令可以运行。

2024-05-08 00:07:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将两个设备连接到我的电脑上,并使用python和adb在它们上运行一些命令。 当我在命令提示符下运行命令时,它运行得很好,但是当我把它们放到python脚本中时,它们会给我错误。 这一直是导致错误的原因:

from subprocess import check_output, CalledProcessError
try:
    adb_ouput = check_output(["adb","devices","-l","|", "grep", "\"model\""])
    print adb_ouput
except CalledProcessError as e:
    print e

我得到的错误消息是:

^{pr2}$

当我在没有grep命令的情况下尝试相同的代码时,它可以工作

adb_ouput = check_output(["adb","devices","-l"])

它给了我正确的输出。在

当我在windows命令提示符中尝试同样的方法时,它工作得很好(我用FINDSTR替换grep,因为我在windows中使用它,而且我也尝试在python脚本中做同样的操作,使用'shell=True'也不使用

例如:

adb devices -l | FINDSTR "model"

这给了我一个毫无问题的机会。 我得到的输出是

123ab6ef device product:xxxxxxxxx model:xxxxxxxxx device:xxxxxxxxx

bd00051a4 device product:yyyyyyyyyy model:yyyyyyyyyy device:yyyyyyyyy

我想弄明白我在这方面出了什么问题,但搞不清楚。 到目前为止,我已经检查了文档:https://docs.python.org/3/library/subprocess.htmlhttps://docs.python.org/3/library/subprocess.html#subprocess.CalledProcessError 这些只是给我错误代码。在

我也看过这些答案: Python, adb and shell execution query 我从这里进行了一些错误检查并添加到我的代码中。在

Python subprocess.check_output(args) fails, while args executed via Windows command line work OKpython check_output fails with exit status 1 but Popen works for same command

我想我离得很近,但就是没法指手画脚。 任何帮助都将不胜感激。在


Tags: 命令脚本outputmodeldevicecheck错误grep
1条回答
网友
1楼 · 发布于 2024-05-08 00:07:36

第一个

adb_ouput = check_output(["adb","devices","-l","|", "grep", "\"model\""])

当然需要shell=True,但即使有了它也不等于

^{pr2}$

当使用check_output时,您将"model"作为grep参数逐字传递,但应该只传递model"model"不在输出中(带引号),因此grep找不到它,并返回exitcode 1,这对grep来说并不是一个真正的错误,而是使check_output触发异常,因为它期望0。在

所以我想把它作为一个快速修复:

adb_ouput = check_output(["adb","devices","-l","|", "grep", "model"],shell=True)

作为longfix,我将直接使用python执行grep命令。在

adb_output = check_output(["adb","devices","-l"])
for l in adb_output.splitlines():
     if "model" in l:
         print(l)

相关问题 更多 >