44

我正在测试一些解析命令行输入的python代码。有没有办法通过 IDLE 传递这个输入?目前我保存在 IDLE 编辑器中并从命令提示符运行。

我正在运行 Windows。

4

12 回答 12

34

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/

于 2010-01-27T17:37:14.817 回答
11

在紧要关头,赛斯的 #2 工作....

2)您可以在提供参数数组的主函数调用前面添加一个测试行(或创建一个执行相同操作的单元测试),或直接设置 sys.argv。

例如...

sys.argv = ["wordcount.py", "--count", "small.txt"]
于 2014-06-16T05:00:50.767 回答
6

以下是我能想到的几种方法:

1)如果需要,您可以直接在 IDLE 控制台上使用参数调用您的“main”函数。

2)您可以在提供参数数组的主函数调用前面添加一个测试行(或创建一个执行相同操作的单元测试),或直接设置 sys.argv。

3)您可以在控制台上以交互模式运行python并传入参数:

C:\> python.exe -i some.py arg1 arg2
于 2010-01-27T17:38:54.113 回答
4

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 sysargv

如果在 python 2.6/2.7 中使用,那么一定要大写: import Tkinter as tk

对于这个例子,我试图在功能和简洁之间取得平衡。根据需要随意添加或删除功能!

在此处输入图像描述

于 2017-06-21T23:13:52.433 回答
2

根据 danben 的帖子,这是我在 IDLE 中工作的解决方案:

try:  
    sys.argv = ['fibo3_5.py', '30']  
    fibonacci(int(sys.argv[1]))  
except:  
    print(str('Then try some other way.'))  
于 2016-06-11T23:12:20.343 回答
2

自动检测 IDLE 并提示命令行参数

#! /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 的“输入”更改为“原始输入”。

于 2017-06-25T19:00:20.473 回答
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")
于 2013-02-20T10:54:45.737 回答
1

Visual Studio 2015 有一个 Python 插件。你可以提供论据。VS 2015 现在是免费的。

于 2015-10-10T17:38:28.950 回答
1

IDLE 现在有一种 GUI 方式来向 sys.argv 添加参数!在“运行”菜单标题下选择“运行...自定义”或只需Shift+F5 ...将出现一个对话框,就是这样!

于 2021-02-01T10:54:12.743 回答
0

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()
于 2018-08-29T16:52:55.460 回答
0

导入系统

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

//如果你正在传递'help'或'verbose'的命令行,你可以这样说:

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

于 2019-01-04T12:10:59.760 回答
0

似乎有与用户一样多的方法来做到这一点。我是一个菜鸟,我只是测试了参数(有多少)。当空闲从 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,所以唯一有区别的时候是我在测试的时候。

像我这样的菜鸟很容易理解。

于 2019-01-28T19:47:37.297 回答