python啟動(dòng)應(yīng)用程序和終止應(yīng)用程序的方法
1. 目的
每天上班,工作需要,電腦上需要每天開機(jī)啟動(dòng)一些軟件,下班時(shí)候,需要關(guān)掉一些軟件。一個(gè)一個(gè)打開和關(guān)閉貌似是很繁瑣的,于是乎,這個(gè)腳本產(chǎn)生了。
2. 環(huán)境
系統(tǒng)環(huán)境:
- win7-32位
- python 2.7.9
你還需要安裝pywin32。
pip install pywin32
3. 編寫腳本
啟動(dòng)應(yīng)用程序腳本
#coding=utf-8 import win32api #日?qǐng)?bào)軟件啟動(dòng) win32api.ShellExecute(0, 'open', r'C:\Program Files\Pudding\Pudding.exe', '','',1) #OA啟動(dòng) win32api.ShellExecute(0, 'open', r'C:\Program Files\Tongda\ispirit\ispiritPro.exe', '','',1) #QQ啟動(dòng) win32api.ShellExecute(0, 'open', r'D:\QQ\Bin\QQ.exe', '','',1) #...... #當(dāng)然你還可以添加很多你需要啟動(dòng)的軟件
終止應(yīng)用程序腳本
#coding=utf-8
import os
#終止QQ軟件
os.system("taskkill /F /IM QQ.exe")
#終止日?qǐng)?bào)訂餐軟件
os.system("taskkill /F /IM Pudding.exe")
#終止OA軟件
os.system("taskkill /F /IM ispiritPro.exe")
#......
#當(dāng)然你還可以添加很多你需要終止的軟件
4. 制作exe
最后把這兩個(gè)腳本制作成exe程序文件,放到桌面上,每次都可以很方便的使用。
python 調(diào)用系統(tǒng)命令,執(zhí)行命令行
python中調(diào)用系統(tǒng)命令的方法還是有比較多的,os/command/subprocess模塊中都有方法可以做到
對(duì)比其他語(yǔ)言(樓主用過(guò)的語(yǔ)言也不多):
PHP:exec(),system(), 整體感覺(jué)不好用, 阻塞很難受
java:模塊功能很強(qiáng)大,沒(méi)的說(shuō),功能與python的subprocess很相似
(1) os.system
僅僅在一個(gè)子終端運(yùn)行系統(tǒng)命令,而不能獲取命令執(zhí)行后的返回信息
(2) os.popen
該方法不但執(zhí)行命令還返回執(zhí)行后的信息對(duì)象
(3) 使用模塊commands模塊
常用的主要有兩個(gè)方法:getoutput和getstatusoutput
(4)使用模塊subprocess
說(shuō)到底還是subprocess最為強(qiáng)大,能實(shí)現(xiàn)很多功能:
比如最近遇到的項(xiàng)目需要再python中調(diào)用shell命令,還要獲取調(diào)用信息,監(jiān)控調(diào)用過(guò)程,超時(shí)終止等,這就要求調(diào)用過(guò)程不阻塞,還能交互,發(fā)現(xiàn)subprocess完全能滿足,可high了
使用方法(文件轉(zhuǎn)換為例):
time_start = time.time()
cmd = "pdf2htmlEX --no-drm 1 --embed-css 0 --embed-image 0 --embed-font 0 --split-pages 1 --fit-width 748 --css-filename html.css --dest-dir %s --embed-external-font 0 --auto-hint 1 %s" % (html_output_folder, src_file)
cmd_list = cmd.split(" ")
sub2 = subprocess.Popen(cmd_list)
i = 0
while 1:
ret1 = subprocess.Popen.poll(sub2)
if ret1 == 0:
time_end = time.time()
time_take = int(time_end - time_start + 0.5)
with global_value_lock:
success_ids[param[2]] = time_take
print sub2.pid,'end'
break
elif ret1 is None:
print sub2.pid, 'running'
if i >= max_check_time:
time_end = time.time()
time_take = int(time_end - time_start + 0.5)
with global_value_lock:
timeout_ids[param[2]] = time_take
sub2.kill()
log_insert("%s%s%s" % (log_dir(output_folder), os.sep, "convert_log.txt"), src_file, "Timeout_Error", 'None')
print "*****************Timeout_Error*****************"
break
time.sleep(check_time)
else:
time_end = time.time()
time_take = int(time_end - time_start + 0.5)
with global_value_lock:
converterror_ids[param[2]] = time_take
log_insert("%s%s%s" % (log_dir(output_folder), os.sep, "convert_log.txt"), src_file, "Process_Term_Error", str(ret1))
print sub2.pid,'term', ret1, ret1
break
i += 1
!!注意:當(dāng)我們直接用cmd而非cmd_list時(shí),得到的pid并不是pdf2html起的進(jìn)程,而是其父進(jìn)程,切記切記
以下是Popen的一些基本用法
Popen它的構(gòu)造函數(shù)如下:
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)
參數(shù)args可以是字符串或者序列類型(如:list,元組),用于指定進(jìn)程的可執(zhí)行文件及其參數(shù)。如果是序列類型,第一個(gè)元素通常是可執(zhí)行文件的路 徑。我們也可以顯式的使用executeable參數(shù)來(lái)指定可執(zhí)行文件的路徑。在windows操作系統(tǒng)上,Popen通過(guò)調(diào)用 CreateProcess()來(lái)創(chuàng)建子進(jìn)程,CreateProcess接收一個(gè)字符串參數(shù),如果args是序列類型,系統(tǒng)將會(huì)通過(guò) list2cmdline()函數(shù)將序列類型轉(zhuǎn)換為字符串。
參數(shù)bufsize:指定緩沖。我到現(xiàn)在還不清楚這個(gè)參數(shù)的具體含義,望各個(gè)大牛指點(diǎn)。
參數(shù)executable用于指定可執(zhí)行程序。一般情況下我們通過(guò)args參數(shù)來(lái)設(shè)置所要運(yùn)行的程序。如果將參數(shù)shell設(shè)為 True,executable將指定程序使用的shell。在windows平臺(tái)下,默認(rèn)的shell由COMSPEC環(huán)境變量來(lái)指定。
參數(shù)stdin, stdout, stderr分別表示程序的標(biāo)準(zhǔn)輸入、輸出、錯(cuò)誤句柄。他們可以是PIPE,文件描述符或文件對(duì)象,也可以設(shè)置為None,表示從父進(jìn)程繼承。
參數(shù)preexec_fn只在Unix平臺(tái)下有效,用于指定一個(gè)可執(zhí)行對(duì)象(callable object),它將在子進(jìn)程運(yùn)行之前被調(diào)用。
參數(shù)Close_sfs:在windows平臺(tái)下,如果close_fds被設(shè)置為True,則新創(chuàng)建的子進(jìn)程將不會(huì)繼承父進(jìn)程的輸入、輸出、錯(cuò)誤管 道。我們不能將close_fds設(shè)置為True同時(shí)重定向子進(jìn)程的標(biāo)準(zhǔn)輸入、輸出與錯(cuò)誤(stdin, stdout, stderr)。
如果參數(shù)shell設(shè)為true,程序?qū)⑼ㄟ^(guò)shell來(lái)執(zhí)行。
參數(shù)cwd用于設(shè)置子進(jìn)程的當(dāng)前目錄。
參數(shù)env是字典類型,用于指定子進(jìn)程的環(huán)境變量。如果env = None,子進(jìn)程的環(huán)境變量將從父進(jìn)程中繼承。
參數(shù)Universal_newlines:不同操作系統(tǒng)下,文本的換行符是不一樣的。如:windows下用'/r/n'表示換,而Linux下用 ‘/n'。如果將此參數(shù)設(shè)置為True,Python統(tǒng)一把這些換行符當(dāng)作'/n'來(lái)處理。
參數(shù)startupinfo與createionflags只在windows下用效,它們將被傳遞給底層的CreateProcess()函數(shù),用 于設(shè)置子進(jìn)程的一些屬性,如:主窗口的外觀,進(jìn)程的優(yōu)先級(jí)等等。
subprocess.PIPE
在創(chuàng)建Popen對(duì)象時(shí),subprocess.PIPE可以初始化stdin, stdout或stderr參數(shù)。表示與子進(jìn)程通信的標(biāo)準(zhǔn)流。
subprocess.STDOUT
創(chuàng)建Popen對(duì)象時(shí),用于初始化stderr參數(shù),表示將錯(cuò)誤通過(guò)標(biāo)準(zhǔn)輸出流輸出。
Popen的方法:
Popen.poll()
用于檢查子進(jìn)程是否已經(jīng)結(jié)束。設(shè)置并返回returncode屬性。
Popen.wait()
等待子進(jìn)程結(jié)束。設(shè)置并返回returncode屬性。
Popen.communicate(input=None)
與子進(jìn)程進(jìn)行交互。向stdin發(fā)送數(shù)據(jù),或從stdout和stderr中讀取數(shù)據(jù)。可選參數(shù)input指定發(fā)送到子進(jìn)程的參數(shù)。 Communicate()返回一個(gè)元組:(stdoutdata, stderrdata)。注意:如果希望通過(guò)進(jìn)程的stdin向其發(fā)送數(shù)據(jù),在創(chuàng)建Popen對(duì)象的時(shí)候,參數(shù)stdin必須被設(shè)置為PIPE。同樣,如 果希望從stdout和stderr獲取數(shù)據(jù),必須將stdout和stderr設(shè)置為PIPE。
Popen.send_signal(signal)
向子進(jìn)程發(fā)送信號(hào)。
Popen.terminate()
停止(stop)子進(jìn)程。在windows平臺(tái)下,該方法將調(diào)用Windows API TerminateProcess()來(lái)結(jié)束子進(jìn)程。
Popen.kill()
殺死子進(jìn)程。
Popen.stdin
如果在創(chuàng)建Popen對(duì)象是,參數(shù)stdin被設(shè)置為PIPE,Popen.stdin將返回一個(gè)文件對(duì)象用于策子進(jìn)程發(fā)送指令。否則返回None。
Popen.stdout
如果在創(chuàng)建Popen對(duì)象是,參數(shù)stdout被設(shè)置為PIPE,Popen.stdout將返回一個(gè)文件對(duì)象用于策子進(jìn)程發(fā)送指令。否則返回 None。
Popen.stderr
如果在創(chuàng)建Popen對(duì)象是,參數(shù)stdout被設(shè)置為PIPE,Popen.stdout將返回一個(gè)文件對(duì)象用于策子進(jìn)程發(fā)送指令。否則返回 None。
Popen.pid
獲取子進(jìn)程的進(jìn)程ID。
Popen.returncode
獲取進(jìn)程的返回值。如果進(jìn)程還沒(méi)有結(jié)束,返回None。
以上這篇python啟動(dòng)應(yīng)用程序和終止應(yīng)用程序的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用Python模擬登錄pastebin.com的實(shí)現(xiàn)方法
這篇文章主要介紹了利用Python模擬登錄pastebin.com的實(shí)現(xiàn)方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07
Python打印scrapy蜘蛛抓取樹結(jié)構(gòu)的方法
這篇文章主要介紹了Python打印scrapy蜘蛛抓取樹結(jié)構(gòu)的方法,實(shí)例分析了打印scrapy蜘蛛抓取樹結(jié)構(gòu)的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
Python實(shí)戰(zhàn)之實(shí)現(xiàn)康威生命游戲
這篇文章主要介紹了Python實(shí)戰(zhàn)之實(shí)現(xiàn)康威生命游戲,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
python可視化大屏庫(kù)big_screen示例詳解
提到數(shù)據(jù)可視化,我們會(huì)想到 Plotly、Matplotlib、Pyecharts等可視化庫(kù),或者一些商用軟件Tableau、FineBI等等。如果你希望操作更簡(jiǎn)單、展現(xiàn)效果更強(qiáng)大,那么這款工具 big_screen 更適合2021-11-11
Python實(shí)現(xiàn)根據(jù)Excel表格某一列內(nèi)容與數(shù)據(jù)庫(kù)進(jìn)行匹配
這篇文章主要為大家詳細(xì)介紹了Python如何使用pandas庫(kù)和Brightway2庫(kù)實(shí)現(xiàn)根據(jù)Excel表格某一列內(nèi)容與數(shù)據(jù)庫(kù)進(jìn)行匹配,需要的可以參考下2025-02-02
django 實(shí)現(xiàn)電子支付功能的示例代碼
這篇文章主要介紹了django 實(shí)現(xiàn)電子支付功能的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

