首页 > 编程语言 >命令行传递 JSON 参数执行 Python 脚本

命令行传递 JSON 参数执行 Python 脚本

时间:2022-09-24 17:44:31浏览次数:92  
标签:Python py json JSON user 命令行 greeter xishuo

先定义一个简单的 Python 脚本 greeter.py

# greeter.py

import sys
import json

param = sys.argv[1]
user_info = json.loads(param)
print(f'Welcome, {user_info["Name"]}, your user id is {user_info["ID"]}.')

在命令行执行 Python 脚本,非常简单:

python greeter.py

将 JSON 参数传入脚本 greeter.py

(base) chloe@ChloedeMacBook-Pro ~ % python greeter.py {"Name":"xishuo","ID":12333} 

报错了

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

正确方法应该使用单引号将 JSON 参数保护起来:

(base) chloe@ChloedeMacBook-Pro ~ % python greeter.py '{"Name":"xishuo", "ID":12333}'
Welcome, xishuo, your user id is 12333.

如果不想用单引号,非要用双引号呢,那就要用 \ 把双引号保护起来。

(base) chloe@ChloedeMacBook-Pro ~ % python greeter.py "{\"Name\":\"xishuo\", \"ID\":12333}"
Welcome, xishuo, your user id is 12333.

那可不可以用双引号保护单引号呢?实践一下:

(base) chloe@ChloedeMacBook-Pro ~ % python greeter.py "{'Name':'xishuo', 'ID':12333}"      
Traceback (most recent call last):
  File "/Users/chloe/PycharmProjects/pythonProject1/greeter.py", line 7, in <module>
    user_info = json.loads(param)
  File "/Users/chloe/opt/anaconda3/lib/python3.9/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/Users/chloe/opt/anaconda3/lib/python3.9/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Users/chloe/opt/anaconda3/lib/python3.9/json/decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

报错了,依然无法解析,为什么呢,让我们看下 JSON 官网的定义:

In JSON, they take on these forms:
...
...
A value can be a string in double quotes, or a number, or true or false or null, or an object or an array. 

JSON 中的字符串必须用双引号包裹,所以在传入 JSON 参数时,要么用单引号将参数保护起来,要么用双引号保护、而参数内的双引号用 \ 保护。

听起来很复杂,但当使用 json.dumps() 时,可以不用担心这个问题,它可以将字典转换成标准 JSON 格式:

>>> import json
>>> user_dict = {'Name': 'xishuo', 'ID': 12333}
>>> user_json = json.dumps(user_dict)
>>> print(user_json)
{"Name": "xishuo", "ID": 12333}

需注意的是,方法 json.dumps()json.dump() 是有区别的。 json.dumps() 是将对象序列化为 JSON 格式的字符串;而 json.dump() 则序列化为 JSON 流形式的 fp ,一个类文件的对象,可以存储到文件中。同理 json.loads()json.load()

最后,需要在程序中执行 greeter.py 脚本并传递 JSON 参数,可以这么做:

>>> user_dict = {'Name': 'xishuo', 'ID': 12333}
>>> user_json = json.dumps(user_dict)
>>> cmd = f'python greeter.py \'{user_json}\''
>>> print(cmd)
python greeter.py '{"Name": "xishuo", "ID": 12333}'

标签:Python,py,json,JSON,user,命令行,greeter,xishuo
From: https://www.cnblogs.com/xishuo/p/16726082.html

相关文章

  • python入门03
    python入门day3目录昨日内容回顾§一、计算机的五大组成部分详解和三大核心硬件1、计算机的五大组成部分详解2、计算机的三大核心硬件3、操作系统OperatingSystem4、编......
  • Python 异步上下文管理器
    1、参考来源https://docs.python.org/zh-cn/3.9/reference/datamodel.html?highlight=aiter#asynchronous-context-managers2、代码示例1#-*-coding:utf-8-*-......
  • python-miio库-米家直流变频落地扇1x
    一、先获取tooken原链接:https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor1importbase642importhashlib3importhmac4importjson......
  • Python 异步迭代器
    1、参考来源https://docs.python.org/zh-cn/3.9/reference/datamodel.html?highlight=aiter#asynchronous-iterators2、代码示例:1#-*-coding:utf-8-*-2"""......
  • SQLYOG基本命令行操作
    DOS窗口: 连接数据库:命令行连接:mysql-uroot-p刷新权限:flushprivileges查看所有的数据库:showdatabases;切换数据库:use数据库名查看数据库中所有的表:......
  • python 9.24
    classRectangle():defgetperi(self,a,b):return(a+b)*2defgetArea(self,a,b):returna*brect=Rectangle()print(rect.getperi(3,......
  • python解释器下载与安装指导手册
    python解释器下载与安装指导手册1.python解释器1.1下载地址1https://www.python.org/1.2.python解释器下载1.3.python解释器主流版本python2.Xpython2.7是2.......
  • Python使用事件循环创建线程池和进程池
    1、来源参考参考官方文档示例:https://docs.python.org/3.9/library/asyncio-eventloop.html#asyncio.loop.run_in_executor2、代码示例1#-*-coding:utf-8-*-2......
  • Python基础教程,Python入门教程(超详细)
    Python由荷兰数学和计算机科学研究学会于1990年代初设计,作为一门叫做ABC语言的替代品。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应......
  • Python爬取全球疫情数据,制作数据可视化图
    前言开发环境python3.8:解释器pycharm:代码编辑器requests发送请求pyecharts绘制图表pandas读取数据爬虫案例思路流程:一.数据来源分析:......