【问题标题】:Windows cmd python subprocess.callWindows cmd python subprocess.call
【发布时间】:2017-01-24 20:16:43
【问题描述】:

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

我希望这是有道理的。

【问题讨论】:

    标签: python windows subprocess


    【解决方案1】:

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

    {x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000}
    

    并将其与所需的 JSON 输入进行比较

    {"""x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw""":1.00000000}
    

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

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

    str({x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000})
    

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

    【讨论】:

      【解决方案2】:

      经过反复试验,我发现字符串必须是这种形式:

      {"x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw":1.00000000}
      

      【讨论】:

        猜你喜欢
        • 2015-09-22
        • 2017-02-10
        • 1970-01-01
        • 1970-01-01
        • 2020-03-29
        • 2015-04-16
        • 2015-07-07
        • 2016-08-27
        • 1970-01-01
        相关资源
        最近更新 更多