Windows cmd python subprocess.call

时间:2017-01-23 18:58:23

标签: python windows subprocess

我有一个命令可以从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()字符串中需要的引号的困惑。

我希望这是有道理的。

2 个答案:

答案 0 :(得分:0)

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

{x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000}

并将其与您想要的JSON输入进行比较

{"""x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw""":1.00000000}

我们可以看到第一个语句中缺少双引号,这可能是解析JSON的主要原因。

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

str({x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000})

我建议您仔细查看示例的前两行以及上面的代码以检查其输出。

答案 1 :(得分:0)

通过反复试验确定我发现字符串必须采用以下形式:

{"x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw":1.00000000}