web-dev-qa-db-ja.com

IDLEでpythonスクリプトを実行する場合、コマンドライン引数(args)を渡す方法はありますか?

コマンドライン入力を解析するpythonコードをテストしています。IDLEを介してこの入力を渡す方法はありますか?現在、IDLEエディターで保存し、コマンドプロンプトから実行しています。

Windowsを実行しています。

41
Ben Gartner

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/

32
danben

ピンチで、セスの#2が働いた....

2)引数の配列を提供するメイン関数呼び出しの前にテスト行を追加する(または同じことを行う単体テストを作成する)か、sys.argvを直接設定します。

例えば...

sys.argv = ["wordcount.py", "--count", "small.txt"]
10
ackmondual

ここに私が考えることができるいくつかの方法があります:

1)必要に応じて、引数を使用してIDLEコンソールで「メイン」関数を直接呼び出すことができます。

2)引数の配列を提供するメイン関数呼び出しの前にテスト行を追加する(または同じことを行う単体テストを作成する)か、sys.argvを直接設定します。

3)コンソールでpythonをインタラクティブモードで実行し、引数を渡すことができます。

C:\> python.exe -i some.py arg1 arg2
6
Seth

Issue 568 の最近の パッチ は、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:

プルリクエスト はまだ開いています:(

4
veganaiZe

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())


Python2の場合、「input」を「raw_input」に変更します

2
veganaiZe

このコードは私には最適です。IDLEで「F5」を使用してから、対話型プロンプトから再度呼び出すことができます。

def mainf(*m_args):
    # Overrides argv when testing (interactive or below)
    if m_args:
        sys.argv = ["testing mainf"] + list(m_args)

...

if __== "__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")
1
MarcH

Danbenの投稿に基づいて、IDLEで機能する私のソリューションを次に示します。

try:  
    sys.argv = ['fibo3_5.py', '30']  
    fibonacci(int(sys.argv[1]))  
except:  
    print(str('Then try some other way.'))  
1
StndFish

Visual Studio 2015にはPython用のアドオンがあります。引数を指定できます。 VS 2015は現在無料です。

1
eddyq

これを行うには、ユーザーと同じくらい多くの方法があるようです。私は初心者なので、引数(いくつ)をテストしました。アイドルがWindowsエクスプローラーから開始する場合、パラメーターでIDLEを開始しない限り、引数は1つだけです(...つまり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をクリックするだけでIDLEを起動している場合、それは動作します。私がしていることのほとんどは、別の言語からpythonと呼ぶことです。そのため、違いがあるのはテスト中だけです。

私のような初心者が理解するのは簡単です。

0
Brian Withnell

VeganaiZeからの回答は、IDLEの外でpython 3.6.3。これを解決するには、if sys.modules['idlelib']: by 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()
0
plep

インポートシステム

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

// 'help'または 'verbose'のコマンドラインを渡す場合、次のように言えます:

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

0
Archie Yalakki