コマンドライン入力を解析する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コンソールで「メイン」関数を直接呼び出すことができます。
2)引数の配列を提供するメイン関数呼び出しの前にテスト行を追加する(または同じことを行う単体テストを作成する)か、sys.argvを直接設定します。
3)コンソールでpythonをインタラクティブモードで実行し、引数を渡すことができます。
C:\> python.exe -i some.py arg1 arg2
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
_
この例では、機能と簡潔さのバランスをうまくとることを試みました。必要に応じて、機能を自由に追加または削除してください!
プルリクエスト はまだ開いています:(
#! /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」に変更します
このコードは私には最適です。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")
Danbenの投稿に基づいて、IDLEで機能する私のソリューションを次に示します。
try:
sys.argv = ['fibo3_5.py', '30']
fibonacci(int(sys.argv[1]))
except:
print(str('Then try some other way.'))
Visual Studio 2015にはPython用のアドオンがあります。引数を指定できます。 VS 2015は現在無料です。
これを行うには、ユーザーと同じくらい多くの方法があるようです。私は初心者なので、引数(いくつ)をテストしました。アイドルが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と呼ぶことです。そのため、違いがあるのはテスト中だけです。
私のような初心者が理解するのは簡単です。
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()
インポートシステム
sys.argv = [sys.argv [0]、 '-arg1'、 'val1'、 '-arg2'、 'val2']
// 'help'または 'verbose'のコマンドラインを渡す場合、次のように言えます:
sys.argv = [sys.argv [0]、 '-h']