簡體   English   中英

python子進程讀取終端輸出並使用PyQt4消息回復

[英]python subprocess reading terminal output and reply using PyQt4 message pop up

嗨,我正在制作一個程序來檢查python中的adb設備

我無法彈出窗口,請更正我的代碼。

從PyQt4導入sys導入子進程導入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()

您可能正在尋找subprocess.check_output()嗎? 您對subprocess.call()將為您提供執行命令的返回碼( 0表示正常退出狀態)。

如果您的結果實際上是字符串"List of devices attached\\n\\n0" ,則應使用.splitlines()將字符串按每行拆分為一個列表,該列表為["List of devices attached", "", "0"] 在這種情況下,盡管您的問題代碼使我難以相信,但您返回的是正確的結果,即0

多一點的環境可能會有所幫助; 您在將輸出輸入代碼中時遇到麻煩嗎? 如果是這樣,您可以考慮改用subprocess.Popen(...)。 它帶有參數列表,並且可以輕松地從指定的源獲取輸出。 例如,如果要運行“ ls myDir”,則可以使用:

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

然后,您可以使用Popen對象的communication()方法來確保命令運行完成並獲取stdout和stderr:

adbOut, adbErr = adbCmd.communicate()

或者,由於communication返回一個元組,如果只需要stdout:

adbOut = adbCmd.communicate()[0]

然后,您可以正常解析以找到所需的數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM