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

在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. UITableView的使用

    参考:IOS7.0 programming cookbook. http://www.cnblogs.com/kenshincui/p/3931948.html http://blog.csdn.ne ...

  2. bzoj2064[和谐社会模拟赛]分裂

    题意:给定一个初始集合和目标集合,有两种操作:1.合并集合中的两个元素,新元素为两个元素之和 2.分裂集合中的一个元素,得到的两个新元素之和等于原先的元素.要求用最小步数使初始集合变为目标集合,求最小 ...

  3. PathGradientBrush类进行渐变颜色的填充

    private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; GraphicsPath gp ...

  4. 一次完整的HTTP请求所经历的7个步骤

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1. 建立TCP连接在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连 ...

  5. [java] 可视化日历的实现(基于Calendar类 )

    写在前面 博文安排顺序如下 1.写在前面 2.源码 3.思路 4.相关知识 该小程序是对Date类及其相关类的复习 要求如下图:实现可视化日历 实现思路 1.先从键盘输入指定格式的字符串(str)2. ...

  6. FlexPaper+SWFTool+操作类=在线预览PDF

    引言 由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf转换为swf格式的文件预览的,所以flexpaper一般和swf ...

  7. Bash 的 no-fork 优化

    我们知道,Bash 在执行一个外部命令时,会先 fork() 一个子进程,然后在子进程里面执行 execve() 去加载那个外部程序.fork 子进程是会耗性能的,所以 Bash 会在下面几种情况下不 ...

  8. .NET导入Excel到SQL数据库

    在我们开发各类应用型系统,经常会遇到导入导出Excel,为什么会用到他呢?企业或者单位在从无信息化到信息化的一个转变过程.在没有信息化的企业或单位之前,一般都采用Excel来记录相应的数据,做统计计算 ...

  9. [Search Engine] 搜索引擎技术之网络爬虫

    随着互联网的大力发展,互联网称为信息的主要载体,而如何在互联网中搜集信息是互联网领域面临的一大挑战.网络爬虫技术是什么?其实网络爬虫技术就是指的网络数据的抓取,因为在网络中抓取数据是具有关联性的抓取, ...

  10. Ubuntu12.04安装lnmp环境笔记

    说明:笔记中使用的命令都是在root账户权限下执行的,如果使用的是普通账户,请注意在命令前加上“sudo”指令. 1.更新apt-get软件库: 命令:apt-get update 该操作的目的是确保 ...