- 首頁(yè)|
- 網(wǎng)校|
- 焚題庫(kù)|
- APP |
-
微信公眾號(hào)
一、使用python內(nèi)置commands模塊執(zhí)行shell
commands對(duì)Python的os.popen()進(jìn)行了封裝,使用SHELL命令字符串作為其參數(shù),返回命令的結(jié)果數(shù)據(jù)以及命令執(zhí)行的狀態(tài);
該命令目前已經(jīng)廢棄,被subprocess所替代;
# coding=utf-8
'''
Created on 2013年11月22日
@author: crazyant.net
'''
import commands
import pprint
def cmd_exe(cmd_String):
print "will exe cmd,cmd:"+cmd_String
return commands.getstatusoutput(cmd_String)
if __name__=="__main__":
pprint.pprint(cmd_exe("ls -la"))
二、使用python最新的subprocess模塊執(zhí)行shell
Python目前已經(jīng)廢棄了os.system,os.spawn*,os.popen*,popen2.*,commands.*來(lái)執(zhí)行其他語(yǔ)言的命令,subprocesss是被推薦的方法;
subprocess允許你能創(chuàng)建很多子進(jìn)程,創(chuàng)建的時(shí)候能指定子進(jìn)程和子進(jìn)程的輸入、輸出、錯(cuò)誤輸出管道,執(zhí)行后能獲取輸出結(jié)果和執(zhí)行狀態(tài)。
# coding=utf-8
'''
Created on 2013年11月22日
@author: crazyant.net
'''
import shlex
import datetime
import subprocess
import time
def execute_command(cmdstring, cwd=None, timeout=None, shell=False):
"""執(zhí)行一個(gè)SHELL命令
封裝了subprocess的Popen方法, 支持超時(shí)判斷,支持讀取stdout和stderr
參數(shù):
cwd: 運(yùn)行命令時(shí)更改路徑,如果被設(shè)定,子進(jìn)程會(huì)直接先更改當(dāng)前路徑到cwd
timeout: 超時(shí)時(shí)間,秒,支持小數(shù),精度0.1秒
shell: 是否通過(guò)shell運(yùn)行
Returns: return_code
Raises: Exception: 執(zhí)行超時(shí)
"""
if shell:
cmdstring_list = cmdstring
else:
cmdstring_list = shlex.split(cmdstring)
if timeout:
end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
#沒(méi)有指定標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出的管道,因此會(huì)打印到屏幕上;
sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096)
#subprocess.poll()方法:檢查子進(jìn)程是否結(jié)束了,如果結(jié)束了,設(shè)定并返回碼,放在subprocess.returncode變量中
while sub.poll() is None:
time.sleep(0.1)
if timeout:
if end_time <= datetime.datetime.now():
raise Exception("Timeout:%s"%cmdstring)
return str(sub.returncode)
if __name__=="__main__":
print execute_command("ls")
也可以在Popen中指定stdin和stdout為一個(gè)變量,這樣就能直接接收該輸出變量值。
在python中執(zhí)行SHELL有時(shí)候也是很必須的,比如使用Python的線程機(jī)制啟動(dòng)不同的shell進(jìn)程,目前subprocess是Python官方推薦的方法,其支持的功能也是最多的,推薦大家使用。
怎么運(yùn)行python腳本
在Linux中,可以使用nohup將腳本放置后臺(tái)運(yùn)行,如下:
nohup python myscript.py params1 > nohup.out 2>&1 &
但直接使用上面代碼,無(wú)法在程序運(yùn)行過(guò)程中查看Python中的print "computing" 輸出結(jié)果,比如在每次循環(huán)中使用print語(yǔ)句等。原因是python的輸出有緩沖,導(dǎo)致nohup.out不能夠馬上看到輸出。
解決方法:
使用-u參數(shù),使得python不啟用緩沖。
修改命令如下:
nohup python -u myscript.py params1 > nohup.out 2>&1 &
這樣就可以同步看到輸出結(jié)果了。
運(yùn)行python腳本的方法
1、直接使用python xxxx.py執(zhí)行。其中python可以寫成python的絕對(duì)路徑。使用which python進(jìn)行查詢。
2、在文件的頭部(第一行)寫上#!/usr/bin/python2.7,這個(gè)地方使用python的絕對(duì)路徑,就是上面用which python查詢來(lái)的結(jié)果。
再用chmod改變文件的執(zhí)行權(quán)限,然后在外面就可以使用./xxx.py或xxx.py執(zhí)行了。
因?yàn)樵趌inux中,python啊shell這些程序都是普通的文本格式,都需要一種程序去解釋執(zhí)行它。要么調(diào)用的時(shí)候指定,要么在文件頭指定。
python腳本直接執(zhí)行的方式
1. 在python文件里第一行加上#! /usr/bin/python,即你的python解釋器所在的目錄。
2. 另外還有一種寫法是#! /usr/bin/env python編輯完成python腳本文件后為它加上可執(zhí)行權(quán)限。例如你的python腳本文件叫做runit.py,那么就在shell中輸入如下命令:chmod +x runit.py
之后直接在shell中輸入./runit.py就可以執(zhí)行你的python程序了。當(dāng)然這是在Linux下的操作
3. 如果想在windows下直接執(zhí)行Python程序,就需要使用py2exe工具將python源程序編譯成exe文件了。
上一篇:python如何讀取csv
下一篇:pythontime()使用方法
初級(jí)會(huì)計(jì)職稱中級(jí)會(huì)計(jì)職稱經(jīng)濟(jì)師注冊(cè)會(huì)計(jì)師證券從業(yè)銀行從業(yè)會(huì)計(jì)實(shí)操統(tǒng)計(jì)師審計(jì)師高級(jí)會(huì)計(jì)師基金從業(yè)資格稅務(wù)師資產(chǎn)評(píng)估師國(guó)際內(nèi)審師ACCA/CAT價(jià)格鑒證師統(tǒng)計(jì)資格從業(yè)
一級(jí)建造師二級(jí)建造師消防工程師造價(jià)工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測(cè)工程師建筑八大員注冊(cè)建筑師二級(jí)造價(jià)師監(jiān)理工程師咨詢工程師房地產(chǎn)估價(jià)師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評(píng)價(jià)土地登記代理公路造價(jià)師公路監(jiān)理師化工工程師暖通工程師給排水工程師計(jì)量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會(huì)工作者司法考試職稱計(jì)算機(jī)營(yíng)養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級(jí)職稱護(hù)士資格證初級(jí)護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實(shí)踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗(yàn)技師臨床醫(yī)學(xué)理論中醫(yī)理論