看板 Python 關於我們 聯絡資訊
因工作需要以nosetests跑測試, 但現在遇到一個問題 就是當我以subprocess的方式呼叫nosetests來跑testcase時 testcase中print出來的東西無法"被看見" 下面run.py和test.py是簡化後的範例: 首先執行run.py, 這時會要求輸入一個值並存放在檔案runtemp裡 接著以subprocess.call呼叫nosetests去跑test.py這個testcase 最後test.py會去取得runtemp裡面的值並print出來 這樣的作法在執行上是可行, 但問題出在test.py裡的print無法被看到 我試過即便以subprocess.check_output的方式去取得回傳值也沒用 推測的原因可能是nosetests執行test.py時 因為又起了另一個process在執行而不是在subprocess裡所以才看不到 不曉得有沒有什麼辦法可以讓test.py的print"被看見" 懇請大家幫忙了, 謝謝~ run.py --------------------- s = input("Please input a value : ") file = open('runtemp', 'w') file.write(s) file.close() subprocess.call('nosetests test.py', shell=True) --------------------- test.py --------------------- file = open('runtemp', 'r') x = file.read() print(x) --------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.146.87.216 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1468491780.A.14F.html
kenduest: python2 嗎 ? file.write(str(s)) <---請轉 string 07/14 19:07
jonney211: 是python3; 試了str()仍然不行 07/14 21:52
kenduest: 有什麼錯誤呢還是訊息嗎 07/14 23:16
kenduest: nosetests 這是什麼不清楚,先改 python 就好 07/14 23:17
kenduest: ...call('python test.py', shell=True) 07/14 23:19
kenduest: 若你要跑所謂 unit test 這是這類要用 nosetests 07/14 23:27
kenduest: 就不應該預期會可以直接看到所謂程式的訊息輸出 07/14 23:27
kenduest: 因為跑這類測試 stdout 是給 nosetests 輸出顯示用的 07/14 23:28
kenduest: 真的要看到原本程式的 stdout 輸出也可以,就加上 07/14 23:28
kenduest: --nocapture 參數就好,只是你要想清楚你這樣用目的 07/14 23:28
kenduest: 另外你程式碼看不到所謂的 unit test 程式碼片段 07/14 23:32
kenduest: 所以用這樣的命令跑程式碼的目的也完全看不出重點 07/14 23:32
jonney211: 感謝k大, 剛試了一下問題真的出在nosetests這runner上 07/15 00:27
jonney211: 上面範例沒有unittest程式碼純粹是我懶得列而已 07/15 00:29
jonney211: 因為unittest裡的測試項跑起來都沒問題 07/15 00:30
jonney211: 只是我先前一直找不到看不見程式訊息輸出的原因 07/15 00:31
jonney211: 感謝解惑QQ 07/15 00:32