在 Python 2.7 以上版本可以用 subprocess.check_output() 這個方法
不過看了一下文件,Python 2.6 似乎沒有 check_output 的方法,有的只有 Popen 而已。
底下的程式中,因為輸出的資料希望能夠以行為單位,因此使用了 StringIO 做行輸出:
import subprocess import StringIO def execute (program): ''' Args: program - A list that contains the command for executing. Returns: A StringIO instance that contains the result of execution. Raises: IOError - Cannot send the command. ''' try: proc = subprocess.Popen(program, stdout=subprocess.PIPE) process_res = proc.communicate() # Use StringIO to format the response into lines. return StringIO.StringIO(process_res[0]) except OSError, e: print e.output raise IOError() except ValueError, e: print e.output raise IOError() except subprocess.CalledProcessError,e: print e.output raise IOError()
要執行指令時,以 List 的形式輸入指令給上述的 execute() 方法
execute() 回傳的 StringIO 就可以透過 readline() 的方式取得指令的回應。
program = ["/usr/sbin/gluster", "volume", "info", "vol"] # Execute the command. buf = runtime.execute(self.program) # Parse the response. while True: line = buf.readline() # Do whatever you want to parse the response.
參考資料:
哈囉 請問我最近也想寫類似的工具,執行指令(例如ipconfig之類的)後,將指令的回應存成指定的檔案,可以請問大概要如何寫麻? 第一次寫 python。
回覆刪除