Código de Visual Studio: ejecute el archivo de Python con argumentos

7 minutos de lectura

Avatar de usuario de Thyrst
sed’

¿Hay una manera fácil de ejecutar un archivo de Python dentro de Visual Studio Code con argumentos?

Sé que puedo agregar una configuración personalizada en el launch.json archivo con el args palabra clave. Sin embargo, es molesto modificar el lanzamiento.json archivo cada vez solo porque quiero usar diferentes argumentos.

Avatar de usuario de Jeremy Thompson
jeremy thompson

Visual Studio Code solo admite uno lanzamiento.json expediente. Sin embargo, admite dos o más configuraciones, y aparecen en la lista desplegable del menú/panel de la izquierda (en lugar de “Sin configuraciones”).

Ingrese la descripción de la imagen aquí

En el panel DEPURAR, haga clic en el Configuración botón con un círculo rojo arriba o haga clic en el enlace azul “crear archivo launch.json”:

Haga clic en él y se crea un lanzamiento.json archivo con configuraciones de depuración. Edite este archivo y agregue el argumentos en este formato de par de claves Y agregue múltiples para diferentes argumentos incluido Sustitución de variables!

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File with my args",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "args": [
                "--username", "Jeremy",
                "--account", "Stackoverflow"
            ],
            "console": "integratedTerminal"
        },
        {
            "name": "Python: Current File with UserName arg",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "args": ["${env:USERNAME}"],
            "console": "integratedTerminal"
        }
    ]
}

Ponga un punto de interrupción en su secuencia de comandos de Python, por ejemplo, en la primera línea debajo def main(...) y luego presione F5 o haga clic Menú Ejecutar > Iniciar depuración.

  • Esa es una respuesta útil, pero la pregunta era sobre correrno depuración. ¿Es posible ejecutar el script con argumentos sin los retrasos resultantes del depurador?

    – León

    19 de agosto de 2020 a las 3:29

  • Aunque es un IDE, también puedes vscode.exe -path c:\file.py -args a=b para ejecutarlo?

    –Jeremy Thompson

    19 de agosto de 2020 a las 5:29


  • @Thyrst’ Actualicé la respuesta, ¿podría echarle otro vistazo? Gracias.

    –Jeremy Thompson

    13 oct 2020 a las 7:31

  • ¿Puedo usar la configuración de inicio de alguna manera para ejecuciones normales, no para depuración? ¿O cómo pasaría argumentos sin depurar?

    – CGFoX

    23 de agosto a las 14:40

  • @CGFoX tal vez intente simularlo? stackoverflow.com/a/65210837/495455

    –Jeremy Thompson

    25 de agosto a las 6:10

Avatar de usuario de Jotaf
Jotaf

Una solución es hacer que su secuencia de comandos solicite los argumentos de la línea de comandos (en la consola interna de Visual Studio Code).

Esto se puede hacer mucho más útil apoyándose en línea de lectura, que le permite hacer cosas como presionar la tecla de flecha hacia arriba para recorrer los comandos anteriores (historial de comandos) y más. Un ejemplo:

import argparse, readline

def main():
  # Ask for additional command line arguments if needed (for VSCode)
  parser = argparse.ArgumentParser()
  parser.add_argument('--interactive', action='store_true', default=False)
  (args, rest) = parser.parse_known_args()
  if args.interactive:
    try: readline.read_history_file()
    except: pass
    rest += input("Arguments: ").split(" ")  # Get input args
    try: readline.write_history_file()
    except: pass

  # Your other script arguments go here
  parser.add_argument("-output-dir", default="/out")
  # ...
  args = parser.parse_args(rest)

  print(args)

if __name__ == "__main__":
  main()

Luego simplemente configure Visual Studio Code para pasar siempre en el --interactive argumento, y su secuencia de comandos siempre solicitará argumentos (¡con historial!) Incluso cuando establezca puntos de interrupción.

  • ¿Podría incluir cómo “configurar Visual Studio Code para pasar siempre el argumento –interactive” por favor?

    – tigre arlequín

    30 ago a las 15:55

Avatar de usuario de Keshan Nageswaran
Keshan Nageswaran

Puede agregar una tarea personalizada para hacer esto. Esto trata de la tasks.json. Puede agregar un valor predeterminado tareas.json archivo para su proyecto (carpeta de proyecto). Sigue estos pasos. Prensa de teclado Control + Cambio + B. Aparecerá la siguiente ventana emergente

Ingrese la descripción de la imagen aquí

Haga clic en el Configurar tarea de compilación Si ya hay una costumbre tareas.json archivo creado en la siguiente ubicación .vscode/tasks.json el editor lo abrirá. De lo contrario, dará un menú desplegable de sugerencias de ejecutores de tareas ya existentes.

Nuestro intención es crear una costumbre tareas.json para nuestro proyecto, por lo que para crear uno necesitamos seleccionar el Otros opción del menú desplegable. Verifique la captura de pantalla a continuación.

Ingrese la descripción de la imagen aquí

Una vez que seleccione el Otros opción, podría ver un valor predeterminado tareas.json el archivo se creará desde el directorio raíz del proyecto hasta la ubicación .vscode/tasks.json. A continuación se muestra un ejemplo de tareas.json.

Ingrese la descripción de la imagen aquí

Ahora edite el tareas.json archivo para admitir Python.

  1. Cambie la propiedad Comando de "echo" a "Python"
  2. Mantener showOutput como "Always"
  3. Cambiar args (argumentos) de ["Hello World"] a ["${file}"] (Nombre del archivo)
  4. Eliminar la última propiedad problemMatcher
  5. Mantenga isShellCommand y las propiedades de la versión sin cambios
  6. Guardar los cambios realizados

Ahora puede abrir su archivo .py y ejecutarlo bien con el acceso directo Control + Cambio + B.

  • Gracias por la respuesta. Sin embargo, no lo entiendo … Ctrl + Shift + B ejecuta el script, pero ¿cómo puedo pasarle argumentos?

    – Sed’

    30 de abril de 2017 a las 20:03


  • Quiero iniciar el depurador, por ejemplo, desde la paleta de comandos con algo como debug arg1 arg2que iniciaría mi script como python app.py arg1 arg2.

    – Sed’

    30 de abril de 2017 a las 20:06

Avatar de usuario de Ehsan Ahmadi
Ehsan Ahmadi

Si no tienes un tarea.json archivo en su proyecto puede crear uno nuevo con prensa Control + Cambio + B. Luego, elija la primera opción que se le muestre y luego reemplácelas todas con las siguientes:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Run Python with argument",
            "type": "shell",
            "command": "python PROGRAM_NAME.py ARG1 ARG2 ...",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

De lo contrario, agregue la configuración anterior en su existencia tareas.json expediente.

Reemplace PROGRAM_NAME en la configuración anterior con el nombre de su programa y ARG1 ARG2 … indique sus argumentos específicos.

Después de todo, puede ejecutar su tarea creada con Control + Cambio + B y elija la nueva tarea “Ejecutar Python con argumento”.

Otra opción es que puede ejecutar su programa python desde la línea de comandos a través de

python3 -m debugpy --wait-for-client --listen localhost:5678 myprogram.py

Entonces puedes usar un Python: Remote Attach Configuración de launch.json para conectarse al programa. Significa un paso adicional cada vez que enciende su programa: ejecute el programa en la CLI y luego adjunte el depurador, pero hace que especificar los argumentos sea más fluido.

Para simplificar aún más las cosas, puede poner lo anterior en un script bash y pasar los argumentos de CLI a python:

start.sh "my arg that changes all the time"

Luego adjunte a través de “Adjuntar remotamente”.

avatar de usuario de bulletmark
viñeta

He buscado una solución al problema descrito aquí, pero no creo que ninguna de las respuestas sea suficiente, así que he creado un ejecución de depuración utilidad para resolverlo.

Si tiene instalada la extensión VS Code Python, entonces el depurador completo de depuración ya está incluido. La utilidad encuentra la ruta donde está instalado debugpy y luego lo ejecuta para el programa y los argumentos que especifique, en modo de escucha. Conéctese a él desde VS Code usando la configuración de depuración de Python “Remote Attach” (usando la configuración predeterminada de host y puerto). Tu puedes sólo control+c y luego vuelva a ejecutar el comando con los argumentos modificados utilizando su historial de shell y las funciones de edición de la línea de comando, para cada ejecución de depuración.

Avatar de usuario de Jan-Willem Lankhaar
Jan-Willem Lankhaar

Además, a las respuestas de xdhmoore, para aquellos que no están muy familiarizados con la creación de configuraciones en launch.jsondebe verse de la siguiente manera:

"configurations": [
    ...,
    {
        "name": "Python: Remote Attach",
        "type": "python",
        "request": "attach",
        "host": "127.0.0.1",
        "port": 5678

    }
]

Para comenzar la depuración, primero emita el comando de línea de comando en la terminal y luego inicie la configuración de inicio (recién creada) Python: Remote Attach desde el menú de inicio de depuración en VS Code.

¿Ha sido útil esta solución?