Python踩坑之 sys.argv[-1]代表什么

本文详细介绍了Python标准库中的sys.argv函数的使用方法,并通过多个实例演示如何获取和处理Python脚本的命令行参数。

平台:win10+python 3.7.0

一、sys说明:

sys.argv这个函数是我们写python脚本中最常用的一个函数.

sys是Python的一个「标准库」,也就是官方出的「模块」,是「System」的简写,封装了一些系统的信息和接口。

  官方的文档参考:https://docs.python.org/2/library/sys.html

 

  中文版文档参考:http://xukaizijian.blog.163.com/blog/static/170433119201111625428624/

二、实例说明:

 

通过实例具体说明:

创建实例一test01.py,如下:

1 #conding:utf-8
2 import sys #导入sys模块
3 print(sys.argv[0]) # 打印sys.argv的第0个参数
4 
5 # 来运行一下这个脚本,我们随便给他点参数,1个,2个,3个或更多都行.
6 #py -3 test01.py a b c d e f
7 #test01.py
8 #得出结果就显示当前脚本名,这里我们就可以得出第一个结论.
实例一test01.py

 得出结果就显示当前脚本名,这里我们就可以得出第一个结论:sys.argv[0] 返回是的脚本

现在我们修改一下,得到实例二test02.py, 如下:

1 #conding:utf-8
2 import sys #导入sys模块
3 print(sys.argv[1]) # 打印sys.argv的第1个参数
4 
5 #执行如下:
6 #py -3 test02.py a b c d e f 
7 #a
实例二test02.py

得出结果就是第一个参数的值.通过这样类推,我们就知道sys.argv参数的效果了.

返回脚本本身的名字及给定脚本的参数.

了解shell脚本编程的可以这样理解这些参数,sys.argv[0] 就是shell 脚本中的basename ,而sys.argv[1]....就是shell中的$1,$2.....

sys.argv也支持python字符串中的切片,我们还是先修改代码,测试如下——实例三test03.py、实例四test04.py和实例五test05.py

 

1 #conding:utf-8
2 import sys #导入sys模块
3 print(sys.argv[1:]) # 打印sys.argv的第1个参数及其以后所有参数,返回的值是一个list
4 
5 #结果如下:
6 #py -3 test03.py a b c d e f 
7 #['a', 'b', 'c', 'd', 'e', 'f']
实例三test03.py

 

1 #conding:utf-8
2 import sys #导入sys模块
3 print(sys.argv[1:3]) # 打印sys.argv的第1个参数到第三个参数,不包含第三个参数,返回的值是一个list
4 
5 #结果如下:
6 #py -3 test04.py a b c d e f 
7 #['a', 'b']
实例四test04.py

 

 1 #conding:utf-8
 2 import sys #导入sys模块
 3 print(sys.argv[1:5:2])
 4 print(sys.argv[-1])
 5 print(sys.argv[::-1])
 6 
 7 #结果如下:
 8 #py -3 test05.py a b c d e f 
 9 # ['a', 'c']
10 # f
11 #['f', 'e', 'd', 'c', 'b', 'a', '1234.py']
实例五test05.py

上面示例使用了字符串的切片方法,需要先了解字符串的切片知识见我另一篇博客

通过如上示例,应该明白sys.argv的使用和暂时的结果.

sys.argv就是将程序本身和给程序参数返回一个list,这个list中的索引为0的就是程序本身.因此,里面的给sys.argv的参数就是list索引.

三、解决问题:

sys.argv[-1]返回的是调用test**.py后紧跟的所有参数中最后一个,是一个list中的最后一个元素,而这个list是这样的:它是sys模块下的一个全局变量,第一个元素是模块名sys.argv[0]、后面是依次传入的参数sys.argv[1]、sys.argv[2]sys.argv[-1]、sys.argv[-2]。

 

转载于:https://www.cnblogs.com/Alliswell-WP/p/Python_sys-argv.html

python manage.py createsuperuser Traceback (most recent call last): File "E:\learn\ttsxzjc\manage.py", line 15, in <module> execute_from_command_line(sys.argv) File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\core\management\__init__.py", line 371, in execute_from_command_line utility.execute() File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\core\management\__init__.py", line 347, in execute django.setup() File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\__init__.py", line 16, in setup from django.urls import set_script_prefix File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\urls\__init__.py", line 1, in <module> from .base import ( File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\urls\base.py", line 8, in <module> from .exceptions import NoReverseMatch, Resolver404 File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\urls\exceptions.py", line 1, in <module> from django.http import Http404 File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\http\__init__.py", line 5, in <module> from django.http.response import ( File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\http\response.py", line 13, in <module> from django.core.serializers.json import DjangoJSONEncoder File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\core\serializers\__init__.py", line 23, in <module> from django.core.serializers.base import SerializerDoesNotExist File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\core\serializers\base.py", line 6, in <module> from django.db import models File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\db\models\__init__.py", line 3, in <module> from django.db.models.aggregates import * # NOQA ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\db\models\aggregates.py", line 5, in <module> from django.db.models.expressions import Case, Func, Star, When File "E:\learn\ttsxzjc\.venv\Lib\site-packages\djan
03-25
Python 中使用 `QApplication(sys.argv)` 是创建 PyQt 或 PySide GUI 应用程序的标准做法。`sys.argv` 是一个包含命令行参数的列表,这些参数在程序启动时由用户在命令行中输入。将 `sys.argv` 传递给 `QApplication` 的构造函数,可以让 Qt 框架处理与命令行相关的配置选项,从而影响 GUI 的行为或初始化过程。 ### `sys.argv` 的作用 `sys.argv` 是 Python 提供的一个标准模块 `sys` 中的列表变量,它保存了从命令行传入脚本的所有参数。其中,`sys.argv[0]` 是脚本本身的文件名,而后续的元素则是用户在命令行中提供的参数。例如,如果运行命令 `python myapp.py --style fusion`,那么 `sys.argv` 的内容将是 `['myapp.py', '--style', 'fusion']`。将 `sys.argv` 传递给 `QApplication` 可以让 Qt 自动识别并处理这些参数,例如设置应用程序的样式、字体、调试选项等[^1]。 ### 正确使用 `QApplication(sys.argv)` 的方式 创建 `QApplication` 实例时,必须将 `sys.argv` 作为参数传入。以下是一个基本的 PyQt5 应用程序结构示例: ```python import sys from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout app = QApplication(sys.argv) window = QWidget() layout = QVBoxLayout() label = QLabel("Hello, PyQt5!") layout.addWidget(label) window.setLayout(layout) window.setWindowTitle("PyQt5 Example") window.show() sys.exit(app.exec_()) ``` 在这个例子中,`QApplication(sys.argv)` 确保了应用程序能够解析并响应命令行参数。例如,若用户运行 `python app.py --style fusion`,Qt 会自动将应用程序的样式设置为 Fusion 风格[^1]。 ### 常见问题与注意事项 1. **缺少 `sys.argv` 导致的错误** 如果不传入 `sys.argv`,某些依赖于命令行参数的功能将无法正常工作。例如,尝试通过命令行指定样式或禁用 GUI 模式时会失败。虽然程序仍能运行,但失去了通过命令行进行配置的能力[^1]。 2. **未导入 `sys` 模块** 若未导入 `sys` 模块而直接使用 `sys.argv`,Python 会抛出 `NameError`。确保在使用前导入 `sys` 模块。 3. **错误地修改 `sys.argv`** 在某些脚本中,开发者可能手动修改 `sys.argv` 来过滤掉某些参数。如果操作不当,可能会导致 Qt 无法识别正确的参数列表。建议在修改前保留原始列表或明确了解参数用途[^3]。 4. **多平台兼容性问题** 在某些平台上(如 macOS 或嵌入式系统),命令行参数可能会影响窗口系统的集成方式。确保测试不同平台下的行为,尤其是在使用特定图形后端或禁用 GUI 模式时[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值