看别人写的代码,发现喜欢用sys.argv[0]输入文件,比如说:
import sys
import numpy as np
import cv2
#主函数
if __name__ == "__main__":
if len(sys.argv)>1:
#输入图像
img = cv2.imread(sys.argv[1],cv2.IMREAD_ANYCOLOR)
else:
print("Usage: python contours.py image")
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这是一个简单的用Python3+OpenCV读取图片的代码。那么问题来了:sys.argv[1]
之类的什么意思?怎么就读取了?
网上的教程大多就给了个代码让你自己体会,但我确实不懂,虽然C++也有类似argc、argv,argc用来统计程序运行时发送给面函数的命令行参数,后者一般标识为:char *argv[]
这是个字符串数组,用来存放指向的字符串参数的指针数组,每个元素指向一个参数。各成员含义:
- argv[0]指向程序运行的全路径名
- argv[1]指向在dos命令行中执行程序后的第一个字符串
- argv[2]指向执行程序名后的第二个字符串
- argv[3]指向执行程序名后的第三个字符串
- argv[argc]为NULL
但是扯远了。。。那么sys.argv[]
到底怎么用?我在Python里实际跑了下,来看看:
import sys
a = sys.argv[0]
print(a)
在IDE上生成一个代码文件02.py运行后:'D:\\Programs\\Python\\Python36\\02.py'
显然这是运行程序所在路径。在继续测试:在桌面上生成这个文件运行,其输出如下:'C:\\Users\\XXX\\Desktop\\01.py'
验证了我的想法。如同C++一样argv[0]
表示的是路径。再试试将0改为其他数字,可以发现它获取的是命令行输入的参数的,所以,它跟上面所述C++是一样的。
将上面argv[0]
改为argv[1]
,保存为01.py。打开cmd,进入01.py的目录。我的放在D盘,所以先输入D:
,表示将盘符改为D。然后输入D:\Programs\Python\Python36
进入了我所放的01.py目录,这表示我将这文件放在了Python3.6安装根目录下。请根据实际情况修改。
这时命令提示符已经切入代码文件所在目录,先输入python,在输入空格键,再点击02.py文件,将其拖入cmd, 接着再拖入图片,回车,图片就显示出来了。