在IDLE中运行python脚本时,有没有办法传入命令行参数(args)?

时间:2010-01-27 17:33:20

标签: python command-line-arguments python-idle

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

我正在运行Windows。

12 个答案:

答案 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

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

enter image description here

更新:2018-03-31:

pull request仍然开放:(

答案 4 :(得分:2)

自动检测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())


更改&#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,因此唯一有区别的是我正在测试。

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