utiliza resultado qué que por pasar parametros para opcionales omision función funciones funcion ejemplo consola argumentos python command-line-arguments python-idle

que - qué función de python se utiliza para el resultado de la consola



Al ejecutar un script de python en IDLE, ¿hay alguna forma de pasar argumentos de línea de comando(args)? (9)

Estoy probando un código python que analiza la entrada de la línea de comandos. ¿Hay alguna forma de pasar esta entrada a través de IDLE? Actualmente estoy guardando en el editor IDLE y ejecutándolo desde un símbolo del sistema.

Estoy ejecutando Windows.


Detección automática de IDLE y solicitud de argumentos de línea de comandos

#! /usr/bin/env python3 import sys # Prompt user for (optional) command line arguments, when run from IDLE: if sys.modules[''idlelib'']: sys.argv.extend(input("Args: ").split())


Cambia la "entrada" a "raw_input" para Python2.


Aquí hay un par de formas en las que puedo pensar:

1) Puede llamar a su función "principal" directamente en la consola IDLE con argumentos si lo desea.

2) Puede agregar una línea de prueba frente a su llamada a la función principal que proporciona una matriz de argumentos (o crear una prueba de unidad que hace lo mismo), o establecer sys.argv directamente.

3) Puede ejecutar python en modo interactivo en la consola y pasar argumentos:

C:/> python.exe -i some.py arg1 arg2


Basado en el post de danben, aquí está mi solución que funciona en IDLE:

try: sys.argv = [''fibo3_5.py'', ''30''] fibonacci(int(sys.argv[1])) except: print(str(''Then try some other way.''))


En un apuro, el # 2 de Seth funcionó ...

2) Puede agregar una línea de prueba frente a su llamada a la función principal que proporciona una matriz de argumentos (o crear una prueba de unidad que hace lo mismo), o establecer sys.argv directamente.

Por ejemplo...

sys.argv = ["wordcount.py", "--count", "small.txt"]


Este código funciona muy bien para mí, puedo usar "F5" en IDLE y luego volver a llamar desde el prompt interactivo:

def mainf(*m_args): # Overrides argv when testing (interactive or below) if m_args: sys.argv = ["testing mainf"] + list(m_args)

...

if __name__ == "__main__": if False: # not testing? sys.exit(mainf()) else: # Test/sample invocations (can test multiple in one run) mainf("--foo=bar1", "--option2=val2") mainf("--foo=bar2")


La respuesta de veganaiZe produce un KeyError fuera de IDLE con python 3.6.3. Esto se puede resolver reemplazando if sys.modules[''idlelib'']: por if ''idlelib'' in sys.modules: como se muestra a continuación.

import argparse # Check if we are using IDLE if ''idlelib'' in sys.modules: # IDLE is present ==> we are in test mode print("""====== TEST MODE =======""") args = parser.parse_args([list of args]) else: # It''s command line, this is production mode. args = parser.parse_args()



Un patch reciente, para el Issue 5680 , finalmente debería comenzar a permitir esta funcionalidad en futuras versiones de IDLE. Mientras tanto, si desea que su secuencia de comandos detecte de forma automática IDLE y solicite valores de argumento de línea de comandos , puede pegar (algo así como) esto al principio de su código:

#! /usr/bin/env python3 import sys def ok(x=None): sys.argv.extend(e.get().split()) root.destroy() if ''idlelib.rpc'' in sys.modules: import tkinter as tk root = tk.Tk() tk.Label(root, text="Command-line Arguments:").pack() e = tk.Entry(root) e.pack(padx=5) tk.Button(root, text="OK", command=ok, default=tk.ACTIVE).pack(pady=5) root.bind("<Return>", ok) root.bind("<Escape>", lambda x: root.destroy()) e.focus() root.wait_window()

Lo seguirías con tu código normal. es decir. print(sys.argv)

Si se usa en Python 2.6 / 2.7, asegúrese de poner en mayúscula: import Tkinter as tk

Para este ejemplo, he tratado de encontrar un equilibrio feliz entre las características y la brevedad. ¡Siéntase libre de agregar o quitar características, según sea necesario!

Actualización: 2018-03-31:

La patch sigue abierta :(


Visual Studio 2015 tiene un complemento para Python. Puede suministrar argumentos con eso. VS 2015 ahora es gratis.