天天看點

Python | 四種運作其他程式的黑科技

在Python中,可以友善地使用os子產品來運作其他腳本或者程式,這樣就可以在腳本中直接使用其他腳本或程式提供的功能,而不必再次編寫實作該功能的代碼。

為了更好地控制運作的程序,可以使用win32process子產品中的函數,如果想進一步控制程序,則可以使用ctype子產品,直接調用kernel32.dll中的函數.

【方式一】使用os.system()函數運作其他程式

os子產品中的system()函數可以友善地運作其他程式或者腳本,模式如下:

os.system(command)

command: 要執行的指令,如果要向腳本傳遞參數,可以使用空格分割程式及多個參數。

示例如下:

Python | 四種運作其他程式的黑科技

【方式二】使用ShellExecute函數運作其他程式

除了使用os.system()函數外,還可以使用win32api子產品中的ShellExecute()函數來運作其他程式,格式如下:

ShellExecute(hwnd, op, file, args, dir, show)

hwnd: 父視窗的句柄,如果沒有父視窗,則為0

op: 要運作的操作,為open,print或者為空

file: 要運作的程式,或者打開的腳本

args: 要向程式傳遞的參數,如果打開的是檔案則為空

dir: 程式初始化的目錄 

show: 是否顯示視窗

Python | 四種運作其他程式的黑科技

使用ShellExecute函數,就相當于在資料總管中輕按兩下檔案圖示,系統會打開相應程式運作。

NOTE: 

win32api安裝 http://sourceforge.net/projects/pywin32/files/pywin32/ 因我的是64的作業系統,是以下載下傳了這個:pywin32-216.win-amd64-py2.7

【方式三】使用ShellExecute函數運作其他程式

建立程序:

為了便于控制通過腳本運作的程式,可以使用win32process子產品中的CreateProcess()函數建立

一個運作相應程式的程序。其函數格式為:

CreateProcess(appName, cmdLine, proAttr, threadAttr, InheritHandle, CreationFlags, newEnv, currentDir, Attr)

appName         可執行檔案名

cmdLine         指令行參數

procAttr        程序安全屬性

threadAttr      線程安全屬性

InheritHandle  繼承标志

CreationFlags  建立标志

currentDir      程序的目前目錄

Attr             建立程式的屬性

Python | 四種運作其他程式的黑科技

結束程序:

可以使用win32process.TerminateProcess函數來結束已建立的程序, 函數格式如下:

TerminateProcess(handle, exitCode)

handle     要操作的程序句柄

exitCode   程序退出代碼

或者使用win32event.WaitForSingleObject等待建立的線程結束,函數格式如下:

WaitForSingleObject(handle, milisecond)

handle     : 要操作的程序句柄

milisecond: 等待的時間,如果為-1,則一直等待.

Python | 四種運作其他程式的黑科技

【方式四】使用ctypes調用kernel32.dll中的函數

使用ctypes子產品可以讓Python調用位于動态連結庫的函數。

ctypes子產品為Python提供了調用動态連結庫中函數的功能。使用ctypes子產品可以友善地調用由C語言編寫的動态連結庫,并向其傳遞參數。

ctypes子產品定義了C語言中的基本資料類型,并且可以實作C語言中的結構體和聯合體。ctypes子產品可以工作在Windows,Linux,Mac OS等多種作業系統,基本上實作了跨平台。

示例:

Windows下調用user32.dll中的MessageBoxA函數。

Python | 四種運作其他程式的黑科技
Python | 四種運作其他程式的黑科技

ctype子產品中含有的基本類型與C語言類似,下面是幾個基本的資料類型的對照:

Python | 四種運作其他程式的黑科技

原文釋出時間為:2018-10-9

本文作者:MayMatrix

本文來自雲栖社群合作夥伴“

Python專欄

”,了解相關資訊可以關注“

”。