Python運行其他程式的方法執行個體詳解

來源:互聯網
上載者:User
這篇文章主要介紹了Python實現運行其他程式的四種方式,結合執行個體形式分析了Python執行其他程式相關模組與函數提示,需要的朋友可以參考下

本文執行個體講述了Python實現運行其他程式的四種方式。分享給大家供大家參考,具體如下:

在Python中,可以方便地使用os模組來運行其他指令碼或者程式,這樣就可以在指令碼中直接使用其他指令碼或程式提供的功能,而不必再次編寫實現該功能的代碼。為了更好地控制啟動並執行進程,可以使用win32process模組中的函數,如果想進一步控制進程,則可以使用ctype模組,直接調用kernel32.dll中的函數.

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

os模組中的system()函數可以方便地運行其他程式或者指令碼,模式如下:


os.system(command)

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

樣本如下:


>>> import os>>> os.system('notepad')    # 開啟記事本程式.0>>> os.system('notepad 1.txt') # 開啟1.txt檔案,如果不存在,則建立.0

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

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


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

hwnd: 父視窗的控制代碼,如果沒有父視窗,則為0
op : 要啟動並執行操作,為open,print或者為空白
file: 要啟動並執行程式,或者開啟的指令碼
args: 要向程式傳遞的參數,如果開啟的是檔案則為空白
dir : 程式初始化的目錄
show: 是否顯示視窗

樣本如下:


>>> import win32api>>> win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 0)      # 後台執行>>> win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 1)      # 前台開啟>>> win32api.ShellExecute(0, 'open', 'notepad.exe', '1.txt', '', 1)   # 開啟檔案>>> win32api.ShellExecute(0, 'open', 'http://www.sohu.com', '', '', 1)  # 開啟網頁>>> win32api.ShellExecute(0, 'open', 'D:\\Opera.mp3', '', '', 1)     # 播放視頻>>> win32api.ShellExecute(0, 'open', 'D:\\hello.py', '', '', 1)     # 運行程式

使用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 建立程式的屬性

樣本如下:


>>> win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0, win32process.CREATE_NO_WINDOW,None, None, win32process.STARTUPINFO())(<PyHANDLE:892>, <PyHANDLE:644>, 21592, 18780) # 函數返回進程控制代碼、線程控制代碼、進程ID以及線程ID

結束進程:

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


TerminateProcess(handle, exitCode)

handle 要操作的進程控制代碼
exitCode 進程結束代碼

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


WaitForSingleObject(handle, milisecond)

handle : 要操作的進程控制代碼
milisecond: 等待的時間,如果為-1,則一直等待.

樣本如下:


>>> import win32process>>> handle = win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0, win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO())      # 開啟記事本,獲得其控制代碼>>> win32process.TerminateProcess(handle[0], 0)            # 終止進程

或者


>>> import win32event>>> handle = win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0,win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO()) # 建立進程獲得控制代碼>>> win32event.WaitForSingleObject(handle[0], -1)           # 等待進程結束0                                   # 進程結束傳回值

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

使用ctypes模組可以讓Python調用位於動態連結程式庫的函數。

ctypes模組為Python提供了調用動態連結程式庫中函數的功能。使用ctypes模組可以方便地調用由C語言編寫的動態連結程式庫,並向其傳遞參數。ctypes模組定義了C語言中的基礎資料型別 (Elementary Data Type),並且可以實現C語言中的結構體和聯合體。ctypes模組可以工作在Windows,Linux,Mac OS等多種作業系統,基本上實現了跨平台。

樣本:

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


>>> from ctypes import *>>> user32 = windll.LoadLibrary('user32.dll')>>> user32.MessageBoxA(0, str.encode('Ctypes is so smart!'), str.encode('Ctypes'), 0)1

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

---------------------------------------
Ctypes資料類型 C資料類型
---------------------------------------
c_char char
c_short short
c_int int
c_long long
c_float float
c_doule double
c_void_p void *
---------------------------------------

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.