Wenn ein Python-Skript in IDLE ausgeführt wird, ist es eine Möglichkeit, in der Befehlszeile Argumente zu übergeben (args)?

StackOverflow https://stackoverflow.com/questions/2148994

Frage

Ich teste einige Python-Code, Parsen Line-Eingang Befehl. Gibt es eine Möglichkeit, diese Eingabe passieren in durch IDLE? Ich bin im IDLE-Editor zur Zeit sparend und prompt von einem Befehl ausgeführt wird.

Ich bin mit Windows.

War es hilfreich?

Lösung

Es scheint nicht, wie IDLE eine Möglichkeit bietet, diese über die GUI zu tun, aber man konnte so etwas wie:

idle.py -r scriptname.py arg1 arg2 arg3

Sie können auch sys.argv manuell einstellen, wie:

try:
    __file__
except:
    sys.argv = [sys.argv[0], 'argument1', 'argument2', 'argument2']

(Credit http: / /wayneandlayne.com/2009/04/14/using-command-line-arguments-in-python-in-idle/ )

Andere Tipps

In einer Prise, Seths # 2 gearbeitet ....

  

2) Sie können eine Testlinie vor dem Haupt-Funktionsaufruf hinzufügen, die   ein Array von Argumenten liefert (oder einen Komponententest schaffen, die das tut   elbe ist), oder Satz sys.argv direkt.

Zum Beispiel ...

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

Hier sind ein paar Möglichkeiten, dass ich mir vorstellen kann:

1) Sie Ihre „main“ Funktion auf der IDLE-Konsole mit Argumenten direkt aufrufen können, wenn Sie wollen.

2) Sie können eine Testlinie vor dem Haupt-Funktionsaufruf hinzufügen, die eine Reihe von Argumenten liefern (oder einen Komponententest erstellen, die die gleiche Sache tut) oder Satz sys.argv direkt.

3) Sie können Python im interaktiven Modus auf der Konsole ausführen und in Argumenten übergeben:

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

Ein aktuell Patch , Ausgabe 5680 sollte endlich beginnen, diese Funktionalität in zukünftigen Versionen von IDLE zu ermöglichen. In der Zwischenzeit , wenn Sie Ihr Skript möchten die automatische Erkennung IDLE und Aufforderung für Befehlszeilenargument Werte , können Sie fügen Sie ihn (so etwas wie) diese in den Anfang des Codes:

#! /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()

Sie würden folgen, dass Sie mit Ihrem normalen Code. dh. print(sys.argv)

Wenn in Python verwendet 2.6 / 2.7 dann sicher sein Kapital: import Tkinter as tk

In diesem Beispiel habe ich versucht, zwischen Funktionen und Kürze einen glücklichen Mittelweg zu finden. Fühlen Sie sich frei hinzuzufügen oder Funktionen wegzunehmen, je nach Bedarf!

Update: 2018.03.31:

Die -Pull-Request ist noch offen: (

Automatische Erkennung IDLE und Eingabeaufforderung für Befehlszeilenargumente

#! /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())


Change "Eingang" auf "raw_input" für Python2.

Dieser Code funktioniert gut für mich, kann ich „F5“ in IDLE verwenden und dann wieder aufrufen aus der interaktiven Eingabeaufforderung:

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")

Visual Studio 2015 hat ein Addon für Python. Sie können Argumente mit, dass versorgen. VS 2015 ist jetzt frei.

Basierend auf dem Beitrag von danben, hier ist meine Lösung, die funktioniert in IDLE:

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

Antwort von veganaiZe erzeugt einen KeyError außerhalb IDLE mit Python 3.6.3. Dies kann durch Ersetzen if sys.modules['idlelib']: durch if 'idlelib' in sys.modules: wie unten gelöst werden.

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()

import sys

sys.argv = [sys.argv [0], '-arg1', 'val1', '-arg2', 'wert2']

// Wenn Sie vorbei Kommandozeile für ‚Hilfe‘ oder ‚verbose‘ kann man sagen, wie:

sys.argv = [sys.argv [0], 'h']

Es scheint, wie so viele Möglichkeiten, dies als Benutzer zu tun. Me ein noob ist, ich nur für Argumente getestet (wie viele). Wenn der Leerlauf beginnt von Windows Explorer, es hat nur ein Argument (... die LEN (sys.argv) liefert 1), wenn Sie die IDLE mit Parametern gestartet. IDLE ist nur eine Bat-Datei unter Windows ... dass Punkte auf idle.py; Unter Linux verwende ich nicht untätig.

Was neige ich zu tun ist, auf dem Start ...

if len(sys.argv) == 1
    sys.argv = [sys.argv[0], arg1, arg2, arg3....] <---- default arguments here

Ich stelle fest, die einen Schlittenhammer verwendet, aber wenn Sie nur den IDLE Erziehung, indem es in den Standard Klick installieren, wird es funktionieren. Das meiste, was ich tue, ist den Python aus einer anderen Sprache nennen, so das einzig Mal, es einen Unterschied macht, ist, wenn ich zu testen.

Es ist einfach für ein Noob wie mich zu verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top