Pyqt5 獲取命令行參數sys.argv


大家有沒有注意到,很多軟件都能接收第三方應用觸發命令行參數,根據參數打開想要的效果。

在windows任務管理器調取命令行列,我們同樣能看到進程中有好多是帶有參數的。

 

現在,我們用Pyqt5 (Py3.3)實現這樣的效果

一. 先說說sys.argv

官方介紹

sys.argv

The list of command line arguments passed to a Python script. argv[0] is the script name (it is operating system dependent whether this is a full pathname or not). If the command was executed using the -c command line option to the interpreter, argv[0] is set to the string '-c'. If no script name was passed to the Python interpreter, argv[0] is the empty string.

To loop over the standard input, or the list of files given on the command line, see the fileinput module.

 

「argv」是「argument variable」參數變量的簡寫形式,一般在命令行調用的時候由系統傳遞給程序。

這個變量其實是一個List列表,argv[0] 一般是被調用的腳本文件名或全路徑,和操作系統有關,argv[1]和以后就是傳入的數據了。參數從1開始

一般參數由空格分隔。

 

二. 實現Pyqt5 獲取sys.argv 命令行參數

# -*- coding: utf-8 -*-
# 直接運行, 提示請在命令行中運行, 運行參數, -install   -open=C:\document\apple.mp3    -color=red|green|yellow
from PyQt5 import QtCore, QtGui, QtWidgets
import sys, os
import subprocess


class class_cmds(QtWidgets.QWidget):
    Cargv = QtCore.pyqtSignal(list)  # 定義一個帶list參數的signal

    def __init__(self, ):
        super(class_cmds, self).__init__()
        # 直接運行exe
        if sys.argv.__len__() == 1:
            self.dobexec()
            sys.exit()

        self.resize(100, 100)
        self.setWindowFlags(QtCore.Qt.CustomizeWindowHint)  # 去掉windowHint
        self.setWindowIcon(QtGui.QIcon('favicon.ico'))
        self.Cargv.connect(self.dialogg)  # 觸發信號后連接到一個槽dialogg

        is_show_btn = ''
        for arg in sys.argv:
            if arg == '-install':
                is_show_btn = '安裝軟件!'
            color = arg.split('-color=')  # 設置背景顏色
            if color.__len__() >= 2:
                try:
                    '''
                    palette1 = QtGui.QPalette(self)
                    palette1.setColor(QtGui.QPalette.Background, QtGui.QColor(192, 253, 123))  # 設置背景顏色
                    self.setPalette(palette1)
                    '''
                    self.setStyleSheet('background-color:'+color[1])
                except:
                    pass
            copen = arg.split('-open=')  # 打開一個文件
            if copen.__len__() >= 2:
                try:
                    # subprocess.Popen(copen[1])  # 非阻塞, 可打開exe,但對於.mp3、xls、txt、pdf 無效
                    os.system(str(copen[1]))
                    pass
                except:
                    pass
        if is_show_btn:
            self.verticalLayout = QtWidgets.QVBoxLayout()
            self.pushButton = QtWidgets.QPushButton(is_show_btn)
            self.verticalLayout.addWidget(self.pushButton)
            self.setLayout(self.verticalLayout)
            self.pushButton.clicked.connect(self.ok)

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            self.close()

    def ok(self):
        self.Cargv.emit(sys.argv)  # 發射一個信號

    def dialogg(self, list):
        QtWidgets.QMessageBox.about(self, '安裝提示!', '可實行邏輯安裝!' + list[0])

    # 直接運行
    def dobexec(self):
        QtWidgets.QMessageBox.information(None, "運行提示!",
                                          "<p>請在命令行中運行!運行參數包括:</p>"
                                          "<p><b>-install:</b>開始安裝軟件</p>"
                                          "<p><b>-open=path:</b>打開一個path的文件,如:-open=C:\\document\\apple.mp3</p>"
                                          "<p><b>-color:</b>color 顯示exe背景顏色, 其中color=( red|green|yellow )</p>")


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myclass = class_cmds()
    myclass.show()
    sys.exit(app.exec_())

程序說明

直接運行我們讓程序彈出一個MessageBox,提示在命令行中運行的命令參數

參數包括三個(-install      -open         -color)

-install 顯示一個btn,表示可以觸發btn下的邏輯,比如下載、安裝等

-open  打開路徑下的應用

-color  讓程序顯示自定義背景

當在命令行中帶參數運行時就能看到每個參數對應的邏輯。

打包程序

PyInstaller: 3.0.dev6

if __name__ == '__main__':
    from PyInstaller import __main__
    params = ['-F', '-w', '--icon=favicon.ico', 'cmds.py']
    __main__.run(params)

 

三. 運行效果

直接雙擊exe運行

 

在命令行中不帶參數運行

 

命令行帶-install 參數

點擊btn

 

命令行帶 -install 、 -color 參數

 

命令行帶 -open 、 -color 參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM