近期在试验平台,其中通过前端命令来执行框架,并将用例信息通过json传递。本来以为json如此强大和简单,应该水到渠成,却不想发生一个诡异的事情,当json通过argv形式给py文件传递参数时会遇到以下坑:

1、json格式不对:传递的json中可能含有单引号,再就是双引号会失效,下面会讲到

2、json中有中文,在py文件中解析会报编码错误

3、json中有空格,导致py文件接收参数时不完整

这个问题不知道在py3中有没有出现,至少py2中是个大坑。网上的答案基本有2种:一种是先使用json.dumps()存储起来,保留原格式,然后再json.loads();还有一种是使用demjson库。但最后都失败了。今天我讲下我的解决办法,可能不是最好的,但是管用!

问题一:格式问题

通过sys.argv传参给py文件,一个问题就是双引号会被当成是字符的一部分为省略掉如图:

json中的引号消失

解决方法:转义,如图:

引号没有消失,正确解析

问题二:中文问题,argv传参的最多大问题是此时的中文编码是控制台的编码而不是utf-8,如图:

中文编码报错

解决方法:获取字符编码再解码

使用正确的encoding解析

问题三:json中有空格咋办,这种情况很少,但是不能完全避免,此时的空格会被认为是两个argv参数之间的分隔符,如图:

很明显,sys.argv有3个长度,后2个是空格分离的“张”和“三”

解决方法:拼接argvs,目前没想到别的方法,拼接是简单粗暴的,但是不能用join拼接,因为中文编码报错。使用+:

综上是三个问题的最后解决办法,如果有更好的方案,我会及时贴出来,如果有大神知道,希望指点指点!

近期在试验平台,其中通过前端命令来执行框架,并将用例信息通过json传递。本来以为json如此强大和简单,应该水到渠成,却不想发生一个诡异的事情,当json通过argv形式给py文件传递参数时会遇到以下坑:1、json格式不对:传递的json中可能含有单引号,再就是双引号会失效,下面会讲到2、json中有中文,在py文件中解析会报编码错误3、json中有空格,导致py文件接收参数时不完...
Python 代码: import os, sys os. sys tem( sys . argv [1])带 参数 执行 python xxx.py speos. sys tem 是用来执行命令行的。因此该程序会 接收 到第一个 参数 spe,然后在命令行里执行spe,这样,spe( Python IDE)就打开了。 您可能感兴趣的文章: python 的pytest框架之命令行 参数 详解(上) python 获取命令行输 入参 数列表的实例代码 Python 获得命令行 参数 的方法(推荐) Python 解析 命令行读取 参数 –argparse模块使用方法 Python 中的命令行 参数 解析 工具之docop
文章目录 sys sys .path sys .version sys .platform sys . argv json json .dumps() ---序列化 json .loads() ---反序列化 json .dump() ---直接写入文件 json .load() ---直接读取文件
Python 中自带的argparse模块可以用于提供简洁易用的命令行 参数 解析 。 程序内部定义了需要使用的 参数 ,argparse 会默认自动从 sys . argv 解析 出对应的 参数 。argparse模块会自动生成帮助信息和使用提示,同时当用户使用无效 参数 时,会显示错误原因。 argparse的基本用法 如果 参数 很多,比较复杂,并且类型不统一,那么argparse可以很好的解决这些 问题 ,下面一个实例解释了argparse的基本使用方法。 import argparse # 创建一个 参数 解析 实例 parser
Jmeter之ERROR o.a.j.c.CSVDataSet: java.io.IOException: Cannot have quote-char in plain field:[{"] 泠月飞花: 上面不是说解决办法了么 Jmeter之ERROR o.a.j.c.CSVDataSet: java.io.IOException: Cannot have quote-char in plain field:[{"] xpp2812: 楼主找到好的解决办法了吗?请赐教。。。。 Django启动报错:UnicodeDecodeError: 'utf8' codec can't decode byte 0xc1 in position 0: invalid start byte Douglassssss: 准确说是电脑的名称(自己取的),改成中文就好了 selenium Xpath应用疑难一:contains的用法 YoRoll_町: 用这个方法把代码调对了哈哈哈哈 Django启动报错:UnicodeDecodeError: 'utf8' codec can't decode byte 0xc1 in position 0: invalid start byte 泠月飞花: 百度就有啊,很简单