我正在测试一些解析命令行输入的python代码。有没有办法通过 IDLE 传递这个输入?目前我保存在 IDLE 编辑器中并从命令提示符运行。
我正在运行 Windows。
我正在测试一些解析命令行输入的python代码。有没有办法通过 IDLE 传递这个输入?目前我保存在 IDLE 编辑器中并从命令提示符运行。
我正在运行 Windows。
IDLE 似乎没有提供通过 GUI 执行此操作的方法,但您可以执行以下操作:
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)您可以在提供参数数组的主函数调用前面添加一个测试行(或创建一个执行相同操作的单元测试),或直接设置 sys.argv。
例如...
sys.argv = ["wordcount.py", "--count", "small.txt"]
以下是我能想到的几种方法:
1)如果需要,您可以直接在 IDLE 控制台上使用参数调用您的“main”函数。
2)您可以在提供参数数组的主函数调用前面添加一个测试行(或创建一个执行相同操作的单元测试),或直接设置 sys.argv。
3)您可以在控制台上以交互模式运行python并传入参数:
C:\> python.exe -i some.py arg1 arg2
Python 3.7.4+ 中的 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()
您将使用常规代码来遵循这一点。IE。print(sys.argv)
请注意,在 Python 3.7.4+ 中使用 IDLE 时,使用该Run... Customized
命令时,无需访问.import sys
argv
如果在 python 2.6/2.7 中使用,那么一定要大写: import Tkinter as tk
对于这个例子,我试图在功能和简洁之间取得平衡。根据需要随意添加或删除功能!
根据 danben 的帖子,这是我在 IDLE 中工作的解决方案:
try:
sys.argv = ['fibo3_5.py', '30']
fibonacci(int(sys.argv[1]))
except:
print(str('Then try some other way.'))
#! /usr/bin/env python3
import sys
# Prompt user for (optional) command line arguments, when run from IDLE:
if 'idlelib' in sys.modules: sys.argv.extend(input("Args: ").split())
将 Python2 的“输入”更改为“原始输入”。
这段代码对我很有用,我可以在 IDLE 中使用“F5”,然后从交互式提示符再次调用:
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 现在是免费的。
IDLE 现在有一种 GUI 方式来向 sys.argv 添加参数!在“运行”菜单标题下选择“运行...自定义”或只需Shift+F5 ...将出现一个对话框,就是这样!
veganaiZe 的回答使用 python 3.6.3 在 IDLE 之外产生一个 KeyError。这可以通过if sys.modules['idlelib']:
如下替换来解决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's 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 只是 Windows 上的一个 bat 文件……指向 idle.py;在linux上,我不使用idle。
我倾向于做的是在启动时...
if len(sys.argv) == 1
sys.argv = [sys.argv[0], arg1, arg2, arg3....] <---- default arguments here
我意识到这是使用大锤,但如果您只是通过在默认安装中单击它来调出 IDLE,它将起作用。我所做的大部分工作都是用另一种语言调用 python,所以唯一有区别的时候是我在测试的时候。
像我这样的菜鸟很容易理解。