Python的學習(八)----py指令碼中呼叫應用程式

linda1000發表於2012-10-23

Python的學習(八)----py指令碼中呼叫應用程式

在Python指令碼執行過程中,如需要執行另一個程式,或執行相關命令時,一般有幾種方法:

1. os.system(command)

在子終端中執行系統命令command, 在命令執行完後退出並返回執行狀態。無法捕捉命令執行過程返回的具體資訊

2. os.popen(command, type)

開啟一個與command程式之間的管道,並返回命令執行後的資訊物件,並通過type指定管道流的方向,來讀或寫命令的執行結果

說明:os.system 與 os.popen 均能執行系統命令,二者之間的區別在於返回資訊

system只能返回執行後的狀態資訊,popen則可以通過物件訪問獲取執行結果,例如:

>>> import os
>>> p = os.system('ls')
>>> p
0
>>> p = os.popen('ls').readlines()
>>> p
Out[10]:
['test.c\n',
 'conf.ini\n',
....

3. subprocess.popen

subprocess模組可以建立新的程式,通過與新建程式的相關管道(輸入、輸出等)連通,可獲取命令執行的返回 狀態,

其意在取代現有的os.system os.popen等函式, 主要提供一個類Popen

class subprocess.Popen( args, 
      bufsize=0, 
      executable=None,
      stdin=None,
      stdout=None, 
      stderr=None, 
      preexec_fn=None, 
      close_fds=False, 
      shell=False, 
      cwd=None, 
      env=None, 
      universal_newlines=False, 
      startupinfo=None, 
      creationflags=0)

Popen類中有Popen.stdin, Popen.stdout, Popen.stderr三個相關屬性分別表示子程式的標準輸入、輸出、錯誤,可通過屬性實現與子程式通訊

eg: subprocess.Popen(command, shell=True, stdin=subprocess.PIPE)

4. win32api模組

Python本身是沒有自帶訪問windows系統API庫的,需自己下載名為pywin32的庫檔案並安裝後,

1. ShellExecute

匯入win32api模組後,運用ShellExecute()函式來執行其他程式

eg:import win32api 
    ShellExecute(hwnd, ip, file, params, dir, bShow)

2. CreateProcess

為了便於控制通過指令碼執行的程式,可通過使用CreateProcess()函式執行

 CreateProcess(appName, commandLine , processAttributes , threadAttributes , bInheritHandles ,dwCreationFlags , newEnvironment , currentDirectory , startupinfo )

說明:有了已建立程式的控制程式碼就可以使用win32api.TerminateProcess來結束程式


相關文章