es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  

Answer

  1. Avatar for 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:

    import json
    import subprocess
    
    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'}
    
    # codificar args como una cadena JSON
    json_args = json.dumps(args)
    
    # pasar la cadena JSON como argumento a bot.py
    subprocess.call(["python", "bot.py", json_args])
    

    En este ejemplo, el diccionario args se codifica primero como una cadena JSON usando json.dumps. La cadena resultante se pasa luego como argumento a la función subprocess.call, sin usar caracteres de escape.

    Puedes modificar el código para adaptarlo a tus necesidades específicas y ver si resuelve el problema.

Comments are closed.