Windows cmd python subprocess.call

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en kommando, som jeg kan køre manuelt fra Windows-kommandoprompten, og det virker som forventet:


> gridcoinresearchd sendmany "Default" {"""x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw""":1.00000000} 2 "Hello World"


Så jeg bygger min subprocess.call () som følger fra et sæt variabler, hvoraf nogle er afledt af andre variabler, hvor;


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: "))+'"')


derefter:


subprocess.call(['gridcoinresearchd', 'sendmany', account\_label, call\_insert, "2", message], shell=True)


når du bruger subprocess.call får jeg en fejl fra målprogrammet:


error: Error parsing JSON:{x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000}


hvis jeg manuelt foretager variablen:


call\_insert = str("""{"x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw":1.00000000}""")


så fungerer min subprocess.call ().


Så dette tror jeg er min forvirring med, hvordan Windows-kommandoprompten fortolker de citater, jeg har brug for i mine subprocess.call () strings.


Jeg håber det giver mening.

Bedste reference


Hvis vi inspicerer den givne fejlmeddelelse


{x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000}


og sammenlign det med din ønskede JSON-indgang


{"""x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw""":1.00000000}


vi kan se, at der mangler dobbelt citater i den første sætning, og det er nok den væsentligste årsag til, at JSON ikke analyseres.


Så dybest set kan jeg mistanke om, at variablen call\_insert ikke er dannet som forventet, dvs. ikke indeholdt dobbelt citater og er lig med:


str({x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw:1.00000000})


Jeg foreslår, at du ser nærmere på de to første linjer i dit eksempel og i koden over det for at kontrollere dens output.

Andre referencer 1


OK ved forsøg og fejl Jeg fandt ud af at strengen skal være i denne form:


{"x9Bqs6dTm17tsiEyZ9m4j5Yd8N2dpqw":1.00000000}