我正在测试一些解析命令行输入的python代码。有没有办法通过IDLE传递此输入?目前我正在保存IDLE编辑器并从命令提示符运行。
我正在运行Windows。
答案 0 :(得分:32)
似乎IDLE没有提供通过GUI执行此操作的方法,但您可以执行以下操作:
idle.py -r scriptname.py arg1 arg2 arg3
您也可以手动设置sys.argv
,例如:
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/)
答案 1 :(得分:10)
在紧要关头,Seth的#2工作......
2)您可以在主函数调用前面添加一个测试行 提供一个参数数组(或创建一个单元测试,用于执行 同样的事情),或直接设置sys.argv。
例如......
sys.argv = ["wordcount.py", "--count", "small.txt"]
答案 2 :(得分:5)
以下是我能想到的几种方法:
1)如果需要,可以使用参数直接在IDLE控制台上调用“main”函数。
2)您可以在主函数调用前添加一个测试行,该函数调用提供一组参数(或创建一个相同的单元测试),或直接设置sys.argv。
3)您可以在控制台上以交互模式运行python并传入参数:
C:\> python.exe -i some.py arg1 arg2
答案 3 :(得分:4)
patch的最新Issue 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
在这个例子中,我试图在功能和功能之间取得平衡。简洁。根据需要随意添加或删除功能!
pull request仍然开放:(
答案 4 :(得分:2)
#! /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())
更改&#34;输入&#34; to&#34; raw_input&#34;对于Python2。
答案 5 :(得分:1)
这段代码对我很有用,我可以在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")
答案 6 :(得分:1)
Visual Studio 2015有一个Python插件。你可以提供参数。 VS 2015现已免费。
答案 7 :(得分:1)
根据danben的帖子,这是我在IDLE中的解决方案:
try:
sys.argv = ['fibo3_5.py', '30']
fibonacci(int(sys.argv[1]))
except:
print(str('Then try some other way.'))
答案 8 :(得分:1)
IDLE 现在有一个 GUI 方式来向 sys.argv 添加参数!在“运行”菜单标题下选择“运行...自定义”或只是 Shift+F5...将出现一个对话框,就是这样!
答案 9 :(得分:0)
veganaiZe的答案在IDLE外部使用python 3.6.3产生了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()
答案 10 :(得分:0)
导入系统
sys.argv = [sys.argv [0],'-arg1','val1','-arg2','val2']
///如果要通过命令行输入“ help”或“ verbose”,则可以这样表示:
sys.argv = [sys.argv [0],'-h']
答案 11 :(得分:0)
似乎有很多方法可以做到这一点。我是菜鸟,我只是测试了参数(有多少个)。从Windows资源管理器启动空闲时,除非您使用参数启动IDLE,否则它只有一个参数(...即len(sys.argv)返回1)。 IDLE只是Windows上的一个bat文件...指向idle.py;。在linux上,我不使用空闲状态。
我倾向于在启动时做...
if len(sys.argv) == 1
sys.argv = [sys.argv[0], arg1, arg2, arg3....] <---- default arguments here
我知道这是使用大锤,但是如果您只是通过在默认安装中单击它来调出IDLE,它将起作用。我所做的大部分工作都是从另一种语言调用python,因此唯一有区别的是我正在测试。
像我这样的菜鸟很容易理解。