Подтвердить что ты не робот

При запуске python script в IDLE, есть ли способ передать аргументы командной строки (args)?

Я тестирую код python, который анализирует ввод командной строки. Есть ли способ передать этот вход через IDLE? В настоящее время я сохраняю редактор IDLE и запускаю из командной строки.

Я запускаю Windows.

4b9b3361

Ответ 1

Не похоже, что IDLE предоставляет способ сделать это через графический интерфейс, но вы можете сделать что-то вроде:

idle.py -r scriptname.py arg1 arg2 arg3

Вы также можете установить sys.argv вручную, например:

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

(Кредит http://wayneandlayne.com/2009/04/14/using-command-line-arguments-in-python-in-idle/)

Ответ 2

В крайнем случае Сет # 2 работал....

2) Вы можете добавить тестовую линию перед вызовом основной функции, которая предоставляет массив аргументов (или создает unit test, который выполняет то же самое) или напрямую установить sys.argv.

Например...

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

Ответ 3

Вот несколько способов, о которых я могу думать:

1) Вы можете вызвать свою "основную" функцию непосредственно на консоли IDLE с аргументами, если хотите.

2) Вы можете добавить тестовую строку перед вызовом главной функции, которая предоставляет массив аргументов (или создает unit test, что делает то же самое), или напрямую устанавливает sys.argv.

3) Вы можете запустить python в интерактивном режиме на консоли и передать аргументы:

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

Ответ 4

Недавнее исправление для проблемы 5680 должно наконец начать разрешать эту функциональность в будущих выпусках IDLE. Тем временем, если вы хотите, чтобы ваш скрипт автоматически обнаруживал IDLE и запрашивал значения аргументов командной строки, вы можете вставить (что-то вроде) это в начало вашего кода:

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

Вы будете следовать этому с вашим обычным кодом. то есть. print(sys.argv)

Если используется в python 2.6/2.7, тогда обязательно пишите с заглавной буквы: import Tkinter as tk

В этом примере я попытался найти удачный баланс между функциями и краткостью. Не стесняйтесь добавлять или убирать функции по мере необходимости!

enter image description here

Обновление: 2018-03-31:

Запрос на извлечение еще открыт :(

Ответ 5

Автоопределение IDLE и запрос аргументов командной строки

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


Измените "input" на "raw_input" для Python2.

Ответ 6

Этот код отлично подходит для меня, я могу использовать "F5" в IDLE, а затем снова вызвать из интерактивного приглашения:

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

Ответ 7

В Visual Studio 2015 есть аддон для Python. Вы можете указать аргументы. VS 2015 теперь свободен.

Ответ 8

На основании сообщения danben, вот мое решение, которое работает в IDLE:

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

Ответ 9

Ответ от veganaiZe выдает KeyError вне IDLE с python 3.6.3. Это можно решить, заменив if sys.modules['idlelib']: if 'idlelib' in sys.modules: как if 'idlelib' in sys.modules: ниже.

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 command line, this is production mode.
    args = parser.parse_args()

Ответ 10

импорт системы

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

//Если вы передаете командную строку для 'help' или 'verbose', вы можете сказать как:

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

Ответ 11

Кажется, что есть много способов сделать это как пользователи. Я, будучи новичком, я только что проверил на аргументы (сколько). Когда режим ожидания запускается из проводника Windows, он имеет только один аргумент (то есть len (sys.argv) возвращает 1), если вы не запустили IDLE с параметрами. IDLE - это просто файл bat в Windows... который указывает на idle.py; на Linux я не использую простоя.

То, что я склонен делать, это при запуске...

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

Я понимаю, что использует кувалду, но если вы просто поднимаете IDLE, щелкая по нему в установке по умолчанию, он будет работать. Большая часть того, что я делаю, - это называю питона с другого языка, так что единственное время, когда это имеет значение, это когда я тестирую.

Для такого нуба, как я, это легко понять.