[問題]以subprocess呼叫nosetests執行測試的問題

看板Python作者 (羽球魂!)時間9年前 (2016/07/14 18:23), 編輯推噓1(1016)
留言17則, 2人參與, 最新討論串1/1
因工作需要以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

07/14 19:07, , 1F
python2 嗎 ? file.write(str(s)) <---請轉 string
07/14 19:07, 1F

07/14 21:52, , 2F
是python3; 試了str()仍然不行
07/14 21:52, 2F

07/14 23:16, , 3F
有什麼錯誤呢還是訊息嗎
07/14 23:16, 3F

07/14 23:17, , 4F
nosetests 這是什麼不清楚,先改 python 就好
07/14 23:17, 4F

07/14 23:19, , 5F
...call('python test.py', shell=True)
07/14 23:19, 5F

07/14 23:27, , 6F
若你要跑所謂 unit test 這是這類要用 nosetests
07/14 23:27, 6F

07/14 23:27, , 7F
就不應該預期會可以直接看到所謂程式的訊息輸出
07/14 23:27, 7F

07/14 23:28, , 8F
因為跑這類測試 stdout 是給 nosetests 輸出顯示用的
07/14 23:28, 8F

07/14 23:28, , 9F
真的要看到原本程式的 stdout 輸出也可以,就加上
07/14 23:28, 9F

07/14 23:28, , 10F
--nocapture 參數就好,只是你要想清楚你這樣用目的
07/14 23:28, 10F

07/14 23:32, , 11F
另外你程式碼看不到所謂的 unit test 程式碼片段
07/14 23:32, 11F

07/14 23:32, , 12F
所以用這樣的命令跑程式碼的目的也完全看不出重點
07/14 23:32, 12F

07/15 00:27, , 13F
感謝k大, 剛試了一下問題真的出在nosetests這runner上
07/15 00:27, 13F

07/15 00:29, , 14F
上面範例沒有unittest程式碼純粹是我懶得列而已
07/15 00:29, 14F

07/15 00:30, , 15F
因為unittest裡的測試項跑起來都沒問題
07/15 00:30, 15F

07/15 00:31, , 16F
只是我先前一直找不到看不見程式訊息輸出的原因
07/15 00:31, 16F

07/15 00:32, , 17F
感謝解惑QQ
07/15 00:32, 17F
文章代碼(AID): #1NXsW45F (Python)
文章代碼(AID): #1NXsW45F (Python)