2013-09-16 48 views
0

我正在嘗試使用casperjs在我的web應用上運行一些集成測試。要做到這一點,我有以下測試類:試圖用Python調用shell命令,什麼也得不到

from django.conf import settings 
import unittest 
import subprocess 

class MyTest(unittest.TestCase): 
    def test_something(self): 
     print "begin" 
     command = "../../n1k0-casperjs-76fc831/bin/casperjs test.js" 
     p = subprocess.Popen(command, shell=True, bufsize=0, stdout=subprocess.PIPE, universal_newlines=True) 
     p.wait() 
     output = p.stdout.read() 
     p.stdout.close() 
     print output 
     print "end" 

當我執行這個代碼在Django,或classif Python Shell中,我得到了js腳本的輸出。但是,當它與Django的調用,我得到這個:

begin 

end 

你會知道爲什麼會發生這種情況?

+0

順便說一句,不叫p.wait()當你重定向到一個管道。如果管道充滿,這可能會掛起。讀完管道,然後等待。 – tdelaney

回答

1

是否有可能你的shell命令實際上輸出到stderr?

重定向錯誤輸出到標準輸出,試試這個調用命令:

p = subprocess.Popen(command, shell=True, bufsize=0, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) 
+0

就是這樣,謝謝! – fxm