2016-11-17 745 views
0

我想编写一个脚本,需要在一个参数,它包含了一些JSON数据,和(为简单起见)打印东西的字符串。传递一个JSON字符串作为参数传递给Python脚本导致报价问题

import argparse 
import json 

parser = argparse.ArgumentParser(description='json load and print') 
parser.add_argument('-i','--inputstring', help='Input String in JSON format',required=True) 
args = parser.parse_args() 

inp = parser.parse_args() 

data = json.loads(inp) 

print(data['Employees']) 

当我运行这个命令行我得到的,因为我用它来包裹字符串结束了在JSON匹配双引号的双引号的错误:

python myscript.py -i "{ "Employees": "name name"}" 
Unrecognized arguments Employees... 

如果我切换json双引号引用单引号,json解析器将不起作用。

如何处理这样的事情?

回答

1

预期如果你的代码将工作改变你分配输入变量的方式。改变这一行:

inp = parser.parse_args() 

inp = args.inputstring 

parse_args()返回argparse.Namespace对象,所以你需要事先检索该对象的输入,将它传递给解析器。另外,您需要在shell命令中使用双引号。我得到运行与上述变化的预期输出:

python myscript.py -i "{ \"Employees\": \"name name\"}" 
0

你应该用单引号代替双引号:

python myscript.py -i "{ 'Employees': 'name name'}" 
1

严格,你应该逃避在JSON内部双引号:

python myscript.py -i "{ \"Employees\": \"name name\"}" 

但看你的代码中,有一对夫妇其他原因可能不起作用:

  1. 你在指定argsinp的值相同,函数调用返回值为:parser.parse_args()。也许你的意思分配inp = args.inputstring

  2. 已经标记了一个问题,python2但看着你print(...)声明,看起来你已经为python3书面

相关问题