El script de Python se ejecuta en la terminal o la consola, pero no cuando se ejecuta desde una función.
Tengo un script de Python que toma un argumento en formato JSON.
Cuando ejecuto este script desde la terminal, se ejecuta. A continuación se muestra el código exacto que ejecuto en la terminal:
python bot.py dca strin '{"marketplace":"USDT","tokenlist":[{"token":"C98","min":0,"max":500},{"token":"CHESS","min":1,"max":5}],"compression":1,"buyamount":20,"tp":3,"sl":10,"continueflag":0,"rsi_level":0,"trstart":1.5,"trstop":0.1,"dca":[[2,100],[4,100],[6,100],[8,100],[10,100],[15,100]],"host":"localhost","user":"root","password":"root","database":"trading"}'
Mi error ocurre cuando creo otro script/función Python para ejecutar mi bot.py.
En mi función, ejecuto el bot.py usando subprocess.call
de la siguiente manera:
args = '{"marketplace":"USDT","tokenlist":[{"token":"C98","min":0,"max":500},{"token":"CHESS","min":1,"max":5}],"compression":1,"buyamount":20,"tp":3,"sl":10,"continueflag":0,"rsi_level":0,"trstart":1.5,"trstop":0.1,"dca":[[2,100],[4,100],[6,100],[8,100],[10,100],[15,100]],"host":"localhost","user":"root","password":"root","database":"trading"}'
subprocess.call(["python", "bot_5_12/runner_single.py dca strin", args])
Sin embargo, cuando ejecuto mi función, obtengo el siguiente error:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
Por favor, aconseje, ya que no sé cómo solucionar esto desde mi final.
davy.ai
El mensaje de error sugiere que el argumento JSON pasado al script no está correctamente formateado. Parece que el argumento se está pasando con caracteres de escape, lo que puede estar causando el problema.
Una forma de resolver esto es formatear correctamente el argumento en la función, sin usar caracteres de escape. Puedes intentar usar la función
json.dumps
incorporada de Python para codificar el argumento como una cadena JSON, y luego pasarlo como un argumento de línea de comandos al script. Aquí tienes un ejemplo:En este ejemplo, el diccionario
args
se codifica primero como una cadena JSON usandojson.dumps
. La cadena resultante se pasa luego como argumento a la funciónsubprocess.call
, sin usar caracteres de escape.Puedes modificar el código para adaptarlo a tus necesidades específicas y ver si resuelve el problema.