Я тестирую код python, который анализирует ввод командной строки. Есть ли способ передать этот вход через IDLE? В настоящее время я сохраняю редактор IDLE и запускаю из командной строки.
Я запускаю Windows.
Я тестирую код python, который анализирует ввод командной строки. Есть ли способ передать этот вход через IDLE? В настоящее время я сохраняю редактор IDLE и запускаю из командной строки.
Я запускаю Windows.
Не похоже, что 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) Вы можете добавить тестовую линию перед вызовом основной функции, которая предоставляет массив аргументов (или создает unit test, который выполняет то же самое) или напрямую установить sys.argv.
Например...
sys.argv = ["wordcount.py", "--count", "small.txt"]
Вот несколько способов, о которых я могу думать:
1) Вы можете вызвать свою "основную" функцию непосредственно на консоли IDLE с аргументами, если хотите.
2) Вы можете добавить тестовую строку перед вызовом главной функции, которая предоставляет массив аргументов (или создает unit test, что делает то же самое), или напрямую устанавливает sys.argv.
3) Вы можете запустить python в интерактивном режиме на консоли и передать аргументы:
C:\> python.exe -i some.py arg1 arg2
Недавнее исправление для проблемы 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
В этом примере я попытался найти удачный баланс между функциями и краткостью. Не стесняйтесь добавлять или убирать функции по мере необходимости!
Запрос на извлечение еще открыт :(
#! /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.
Этот код отлично подходит для меня, я могу использовать "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")
В Visual Studio 2015 есть аддон для Python. Вы можете указать аргументы. VS 2015 теперь свободен.
На основании сообщения danben, вот мое решение, которое работает в IDLE:
try:
sys.argv = ['fibo3_5.py', '30']
fibonacci(int(sys.argv[1]))
except:
print(str('Then try some other way.'))
Ответ от 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()
импорт системы
sys.argv = [sys.argv [0], '-arg1', 'val1', '-arg2', 'val2']
//Если вы передаете командную строку для 'help' или 'verbose', вы можете сказать как:
sys.argv = [sys.argv [0], '-h']
Кажется, что есть много способов сделать это как пользователи. Я, будучи новичком, я только что проверил на аргументы (сколько). Когда режим ожидания запускается из проводника 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, щелкая по нему в установке по умолчанию, он будет работать. Большая часть того, что я делаю, - это называю питона с другого языка, так что единственное время, когда это имеет значение, это когда я тестирую.
Для такого нуба, как я, это легко понять.