0

嗨,我正在制作一个程序来检查 python 中的 adb 设备

我无法弹出窗口,请更正我的代码。

import sys import subprocess from PyQt4 import QtGui, QtCore

ad = subprocess.check_output(["adb", "devices"])

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))


        btn = QtGui.QPushButton('Check Device', checkadb(ad))
        btn.resize(135, 30)
        btn.move(50, 10)

        self.setGeometry(250, 250, 400, 400)
        self.setWindowTitle('Tooltips')
        self.show()

def clicked(*args):
    QtGui.QMessageBox.about(QtGui, "No Device Found")

def clicked2(*args):
    QtGui.QMessageBox.about(QtGui, "Device Found")

def checkadb(ad):
    if len(ad) <= 27:
        clicked()

elif len(ad) > 27:
    clicked2()

def main():

app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

if __name__ == '__main__':
    main()
4

2 回答 2

0

你可能在找subprocess.check_output()吗?您的使用subprocess.call()将为您提供所执行命令的返回码(a0表示正常退出状态)。

如果您的结果实际上是字符串,"List of devices attached\n\n0"那么您应该使用.splitlines()将字符串按每一行拆分为一个列表,即["List of devices attached", "", "0"]. 在这种情况下,尽管您的问题中的代码让我相信,但您正在返回正确的结果,即0.

于 2013-06-26T16:41:43.807 回答
0

更多的上下文可能会有所帮助;您在将输出输入代码时遇到问题吗?如果是这样,您可以考虑使用 subprocess.Popen(...) 代替。它需要一个参数列表,并且可以轻松地从指定的源获取输出。例如,如果你想运行 'ls myDir',你可以使用:

adbCmd = subprocess.Popen(['adb', 'devices'], stdout=PIPE)

然后您可以使用 Popen 对象的communicate() 方法来确保命令运行完成并获取stdout 和stderr:

adbOut, adbErr = adbCmd.communicate()

或者,由于通信返回一个元组,如果你只想要标准输出:

adbOut = adbCmd.communicate()[0]

然后你可以正常解析找到你想要的数字。

于 2013-06-26T17:18:00.970 回答