コマンドライン入力を解析する python コードをテストしています。この入力を IDLE 経由で渡す方法はありますか? 現在、IDLE エディターで保存し、コマンド プロンプトから実行しています。
私はWindowsを実行しています。
コマンドライン入力を解析する 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
danben の投稿に基づいて、IDLE で動作する私のソリューションを次に示します。
try:
sys.argv = ['fibo3_5.py', '30']
fibonacci(int(sys.argv[1]))
except:
print(str('Then try some other way.'))
このコードは私にとってはうまく機能します。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")
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()