2017-12-05 3 views
1

別のpyスクリプトを呼び出してintを入力するpyスクリプトを作成しようとすると、問題がいくつか見つかりました。私はこのような何かをすると仮定python 3.xの別のスクリプトへの入力

私の最初のスクリプトは私の2番目のスクリプトのtester.py上simpleScript.py

def addition (a , b) : 
    c = a + b 
    return c 
x = int (input ('input a int')) 
y = int (input ('input a int')) 
summ = addition (x , y) 

です:私はより良い説明

call simpleScript.py ; 
input 4 as x ; 
input 8 as y ; 
run simpleScript.py using those two input ; 

といくつかのより多くのもの。問題は、私が本当にそれを正しく入力することができないということです。私がそれを得ると、私は残りのすべてを行うことができるでしょう。

ありがとうございます。

+1

代わりにパラメータを渡すのはどうですか? –

+0

実際にユーザーが値を入力しないようにするには、 'input'を使用する理由はありますか?ちょうど明確にしたい、テスト目的のための第2のスクリプトです、あなたは最初のスクリプトの単体テストとして入力をシミュレートしたいですか?もしそうなら、これは役に立ちます:https://stackoverflow.com/questions/46222661/how-to-mock-a-user-input-in-python - 'builtins.input'を偽装して見たいと思っています戻り値(人間が入力した数値)。 – Bilkokuya

+0

@Bilkokuya yep、私は人間が入力できるすべての可能な入力をシミュレートして私の最初のスクリプトをテストするためにスクリプトをコーディングしています。 – lapolis

答えて

0

これとリンクされた複製との間に若干の相違があるため、OPを助けると回答します(ただし、これは閉鎖する必要がある複製です)。ここの入力はモジュールスコープで実行されているので、最初にロードされたときに実行されます。すなわちsimpleScript.pyは、importによって最初に呼び出されたときに入力を要求します。

テストシナリオでこれを行うには、まずsimpleScript.pyが実行可能な機能を提供するようにこれを変更することをお勧めします。そうすれば、重複が提供するソリューションと同じソリューションを使用できます。

しかしsimpleScript.pyは直接コードを実行しないこの特定のケースのために、我々は、下のテストスクリプトで機能をテストすることができます。これは、1を返すようにstdin(コマンドライン入力)をあざけることによって動作

from unittest.mock import patch 
from io import StringIO 

@patch("sys.stdin", StringIO("1\n4")) 
def test_simpleScript(): 
    import simpleScript 

test_simpleScript() 

、新しいですinputstdinとどのように機能するかによって、最初の呼び出しではinputに、次に4になると、次の呼び出しで1が​​返されます。

importsimpleScriptモジュール - すべてのコードが実行されます。上記のモックパッチのために、この間にinputを呼び出すと、与えられた数字が読み込まれます。モジュールは最初にロードされるので、複数のテストを順番に試してみると問題が発生する可能性があります。この場合、モジュールをリロードする方法については、こちらをご覧ください。How do I unload (reload) a Python module?

関連する問題