[英]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.