2017-01-23 166 views
0

我有一个命令从Windows命令提示符,它按预期工作我可以手动运行:的Windows CMD蟒蛇subprocess.call

> 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

确定通过试验和错误,我发现该字符串必须以这种形式:

{"x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw":1.00000000} 
0

如果我们检查给定的错误信息

{x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000} 

,并将它与您的期望JSON输入

{"""x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw""":1.00000000} 

我们可以看到的是双引号中的第一条语句失踪,很可能是未解析JSON的主要原因。

所以基本上我会怀疑你预期没有形成call_insert变量,即不包含双引号,并且等于:

str({x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000}) 

我建议你仔细看进入前两行的你的例子和它上面的代码来检查它的输出。