大家有没有注意到,很多软件都能接收第三方应用触发命令行参数,根据参数打开想要的效果。

在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 参数

Pyqt5 获取命令行参数sys.argv的更多相关文章

  1. Python命令行参数sys.argv[]

    学习C语言的时候就没弄明白命令行参数的用法,在学习Pyton 的时候又遇到了命令行参数,在这里稍微学习了一下,稍微明白了一些在这里做个记录方便后面回顾复习. Sys.argv[]是用来获取命令行参数的 ...

  2. 【Python学习 】Python获取命令行参数的方法

    背景 最近编写一个python程序的时候,需要去获取python命令行的参数,因此这里记录下如何获取命令行参数的方法. 一.sys 模块 在 Python 中,sys 模块是一个非常常用且十分重要的模 ...

  3. python获取命令行参数的方法(汇总)

    介绍python获取命令行参数的方法:getopt模和argparse模块. python版本:2.7 一.getopt模块 主要用到了模块中的函数: options, args = getopt.g ...

  4. python获取命令行参数

    python获取命令行参数 主要是通过sys的argv列表来获取命令行内容,命令行的参数以空格分隔放到argv列表中. import sys if __name__ == "__main__ ...

  5. 从Win32程序中的主函数中获取命令行参数

    在标准C或者Win32控制台程序的main函数中,它们都有两个参数:"argc" 和 "argv",如下所示: int main(int argc, char ...

  6. C程序获取命令行参数

    命令行参数 命令行界面中,可执行文件可以在键入命令的同一行中获取参数用于具体的执行命令.无论是Python.Java还是C等等,这些语言都能够获取命令行参数(Command-line argument ...

  7. 【WPF】如何获取命令行参数

    应用程序以 Main 方法为入口点,如果为 Main 方法指定一个 string[] 类型的参数,在程序运行时,这个参数会获取到传递给应用程序的命令行参数. 而 WPF 应用程序比较特殊,因为在VS中 ...

  8. golang获取命令行参数

    部署golang项目时难免要通过命令行来设置一些参数,那么在golang中如何操作命令行参数呢?可以使用os库和flag库. 1.golang os库获取命令行参数 os可以通过变量Args来获取命令 ...

  9. MFC中获取命令行参数的几种方法

    在MFC程序中,可以用以下几种方法来获取命令行参数. 为方便说明,我们假设执行了命令:C:\test\app.exe -1 -2 方法一 ::GetCommandLine(); 将获取到 " ...

随机推荐

  1. Python学习之day2

    1.执行Python脚本时打印的字符有颜色 print "\033[32;1mhello\033[0m" #打印绿色 print "\033[31;1mhello\033 ...

  2. 解析 XML

    解析 XML 文档: 下面的代码片段把 XML 文档解析到 XML DOM 对象中: if (window.XMLHttpRequest){// code for IE7+, Firefox, Chr ...

  3. 编译CM13源码添加来去电归属地 SudaMod开源项目,查看commit提交记录

    这个问题纠结了很多时间,感谢苏打先森@Sudamod的开源项目. 大家知道CM13是没有来去点归属地的,就算有那也是google,对于中国人不适用,所以这里把方法贡献出来. 1.与通话有关的app D ...

  4. 大二在CSDN的博客整理

    001我为什么想写博客 控制台版2048 version_1.0总结 022 囚徒困境中的均衡-----从一篇经典论文说起 021 模拟退火算法学习(一)-----求解最短连通路径 020 小记一次网 ...

  5. 3 HTML&JS等前端知识系列之javascript的基础

    preface 作为一名运维开发,必须懂得前端知识,比如javascript,dom等等,下面就聊聊javascript. include 数据格式 条件判断,循环流程等. 函数 面向对象 what ...

  6. spring aop的使用

    使用上次整合的s2sh工程,加入aop的功能.aop(面向切面编程)是一种对oop的完善,比如在进行数据库操作的时候执行方法前或者后加入一条日志记录,使用一个额外的类去做日志操作,让dao类专注地做它 ...

  7. How to create vlan on Linux (with Cisco Catalyst Switch)

    In this article I want to share to you on how to create and configure vlan on Linux through Cisco Ca ...

  8. 好用的开源web系统总结

    1.论坛 phpwind 一个用wind框架写的论坛       discuz 社区动力 论坛   2.商城 Ecshop 商城腾讯的开源商城项目 一款B2C独立网店系统,系统是基于PHP语言及MYS ...

  9. 认识VTK工作原理

    VTk通过数据流实现变信息为图形数据的. 数据流一般为:source-filter--mapper--actor--render--renderwindow--interactor. 要理解工作原理, ...

  10. Windows群集安装

    一.安装前准备 1.安装dotnet 3.5 框架功能 2.安装starwind,并创建虚拟磁盘http://www.cnblogs.com/chhuang/p/3623305.html 3.使用iS ...