我有一个命令可以从Windows命令提示符手动运行,它按预期工作:
> gridcoinresearchd sendmany "Default" {"""x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw""":1.00000000} 2 "Hello World"
所以我从一组变量构建我的subprocess.call(),其中一些变量派生自其他变量,其中;
call_insert = [val for pair in zip(quotes, quotes, quotes, address, quotes, quotes, quotes, colon, call_amount, comma) for val in pair]
call_insert = str("{"+(''.join(call_insert))+"}")
account_label = str('"'+(raw_input("Choose Account Label: "))+'"')
message = str('"'+(raw_input("Enter if you wish to send a message: "))+'"')
然后:
subprocess.call(['gridcoinresearchd', 'sendmany', account_label, call_insert, "2", message], shell=True)
使用subprocess.call时,我从目标程序中得到错误:
error: Error parsing JSON:{x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000}
如果我手动创建变量:
call_insert = str("""{"x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw":1.00000000}""")
然后我的subprocess.call()工作。
所以我认为这是我对windows命令提示符如何解释我在subprocess.call()字符串中需要的引号的困惑。
我希望这是有道理的。
答案 0 :(得分:0)
如果我们检查给定的错误消息
{x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000}
并将其与您想要的JSON输入进行比较
{"""x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw""":1.00000000}
我们可以看到第一个语句中缺少双引号,这可能是解析JSON的主要原因。
所以基本上我可能会怀疑call_insert
变量没有按预期形成,即不包含双引号,并且等于:
str({x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000})
我建议您仔细查看示例的前两行以及上面的代码以检查其输出。
答案 1 :(得分:0)
通过反复试验确定我发现字符串必须采用以下形式:
{"x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw":1.00000000}