Python中呼叫其他程式的方式

2022-06-11 16:30:14 字數 3789 閱讀 2495

在python中,可以方便地使用os模組來執行其他指令碼或者程式,這樣就可以在指令碼中直接使用其他指令碼或程式提供的功能,而不必再次編寫實現該功能的**。為了更好地控制執行的程序,

可以使用win32process模組中的函式,如果想進一步控制程序,則可以使用ctype模組,直接呼叫kernel32.dll中的函式。下面介紹4種方式:

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

os.system(command):command: 要執行的命令,如果要向指令碼傳遞引數,可以使用空格分割程式及多個引數

例項:

#

開啟記事本

os.system('

notepad')

#用記事本開啟aa.txt

os.system('

notepad aa.txt

') #

aa.txt檔案必須在當前程式目錄

#直接開啟aa.txt

os.system('

aa.txt')

#直接開啟excel檔案

os.system('

aa.xlsx')

#直接開啟word檔案

os.system('

bb.docx')

filepath='

測試.xlsx'#

開啟包含中文的檔案

os.system(filepath.decode('

utf8

').encode('

gbk'))

使用win32api模組中的shellexecute()函式來執行其他程式,格式如下

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

hwnd:          父視窗的控制代碼,如果沒有父視窗,則為0

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

file:          要執行的程式,或者開啟的指令碼

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

dir :          程式初始化的目錄 

show:          是否顯示視窗

使用shellexecute函式,就相當於在資源管理器中雙擊檔案圖示,系統會開啟相應程式執行。

引用win32api,需要安裝 pywin32, 

例項:

import

win32api

win32api.shellexecute(0,

'open

', '

notepad.exe

', '', '', 0) #

後台執行

win32api.shellexecute(0, '

open

', '

notepad.exe

', '', '', 1) #

前台開啟

win32api.shellexecute(0, '

open

', '

notepad.exe

', '

wmi.txt

', '', 1) #

開啟檔案

win32api.shellexecute(0, '

open

', '

iexplore.exe

', '', '', 1) #

開啟ie瀏覽器

win32api.shellexecute(0, '

open

', '

iexplore.exe

', '

', '', 1) #

win32api.shellexecute(0, '

open

', '

mspaint.exe

', '

wxqr.png

', '', 1) #

參考例項:

為了便於控制通過指令碼執行的程式,可以使用win32process模組中的createprocess()函式建立乙個執行相應程式的程序。其函式格式為:

cmdline         命令列引數

procattr        程序安全屬性

threadattr      執行緒安全屬性

inherithandle  繼承標誌

creationflags  建立標誌

currentdir      程序的當前目錄

attr             建立程式的屬性

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

terminateprocess(handle, exitcode)

handle     要操作的程序控制代碼

exitcode   程序退出**

或者使用win32event.waitforsingleobject等待建立的執行緒結束,函式格式如下:

waitforsingleobject(handle, milisecond)

handle     : 要操作的程序控制代碼

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

import

win32process

#開啟記事本,獲得其控制代碼

handle = win32process.createprocess(r'

c:\windows\notepad.exe

', ''

, none, none, 0, win32process.create_no_window, none, none, win32process.startupinfo())

time.sleep(4)

#終止程序

win32process.terminateprocess(handle[0], 0)

import

win32event

#等待程序結束

print win32event.waitforsingleobject(handle[0], -1)

使用ctypes模組可以讓python呼叫位於動態鏈結庫的函式。

ctypes模組為python提供了呼叫動態鏈結庫中函式的功能。使用ctypes模組可以方便地呼叫由c語言編寫的動態鏈結庫,並向其傳遞引數。

ctypes模組定義了c語言中的基本資料型別,並且可以實現c語言中的結構體和聯合體。ctypes模組可以工作在windows,linux,mac os等多種作業系統,基本上實現了跨平台。

例項:windows下呼叫user32.dll中的messageboxa函式。

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

python呼叫其他程式 python呼叫其他程式

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

呼叫其他程式

1含有事務碼 1.1不注入引數,直接呼叫 call transaction suim and skip first screen.1.2注入引數,setparameter id 螢幕字段 field 填充的字段值,螢幕字段 field 填充的字段值.call transaction demo tra...

python 建立程序呼叫其他程式

import subprocess import sys defmain 通過sys.argv獲取命令列引數 if len sys.argv 1 第乙個命令列引數是程式本身所以從第二個開始取 for index in range 1,len sys.argv try 通過subprocess模組的c...