python調(diào)用bash?shell腳本方法
1. os.system()
help(os.system)
1.1. demo
os.system(command):
該方法在調(diào)用完shell腳本后,返回一個(gè)16位的二進(jìn)制數(shù),- 低位為殺死所調(diào)用腳本的信號號碼,高位為腳本的退出狀態(tài)碼,
- 即腳本中exit 1的代碼執(zhí)行后,
os.system
函數(shù)返回值的高位數(shù)則是1,如果低位數(shù)是0的情況下, - 則函數(shù)的返回值是0x0100,換算為十進(jìn)制得到256。
- 要獲得
os.system
的正確返回值,可以使用位移運(yùn)算(將返回值右移8位)還原返回值:
>>> import os >>> os.system("./test.sh") hello python! hello world! 256 >>> n>>8 1
2. os.popen()
help(os.system)
2.1 demo
os.popen(command):
這種調(diào)用方式是通過管道的方式來實(shí)現(xiàn),函數(shù)返回一個(gè)file對象,
里面的內(nèi)容是腳本輸出的內(nèi)容(可簡單理解為echo輸出的內(nèi)容),使用os.popen
調(diào)用test.sh
的情況
>> import os >>> os.popen("./test.sh") <open file './test.sh', mode 'r' at 0x7f6cbbbee4b0> >>> f=os.popen("./test.sh") >>> f <open file './test.sh', mode 'r' at 0x7f6cbbbee540> >>> f.readlines() ['hello python!\n', 'hello world!\n']
3. commands模塊
- (1)commands.getstatusoutput(cmd),其以字符串的形式返回的是輸出結(jié)果和狀態(tài)碼,即(status,output)。
- (2)commands.getoutput(cmd),返回cmd的輸出結(jié)果。
- (3)commands.getstatus(file),返回ls -l file的執(zhí)行結(jié)果字符串,調(diào)用了
getoutput
,不建議使用此方法
4. subprocess
subprocess
模塊,允許創(chuàng)建很多子進(jìn)程,創(chuàng)建的時(shí)候能指定子進(jìn)程和子進(jìn)程的輸入、輸出、錯(cuò)誤輸出管道,執(zhí)行后能獲取輸出結(jié)果和執(zhí)行狀態(tài)。
- (1)subprocess.run():python3.5中新增的函數(shù), 執(zhí)行指定的命令, 等待命令執(zhí)行完成后返回一個(gè)包含執(zhí)行結(jié)果的CompletedProcess類的實(shí)例。
- (2)subprocess.call():執(zhí)行指定的命令, 返回命令執(zhí)行狀態(tài), 功能類似os.system(cmd)。
- (3)subprocess.check_call():python2.5中新增的函數(shù), 執(zhí)行指定的命令, 如果執(zhí)行成功則返回狀態(tài)碼, 否則拋出異常。
說明:subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)
subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)
args
:表示shell指令,若以字符串形式給出shell指令,如"ls -l “則需要使shell = Ture。否則默認(rèn)已數(shù)組形式表示shell變量,如"ls”,"-l"。
當(dāng)使用比較復(fù)雜的shell語句時(shí),可以先使用shlex模塊的shlex.split()方法來幫助格式化命令,然后在傳遞給run()
方法或Popen
。
4.1 demo
Stubs for subprocess Based on http://docs.python.org/2/library/subprocess.html and Python 3 stub from typing import Sequence, Any, Mapping, Callable, Tuple, IO, Union, Optional, List, Text _FILE = Union[None, int, IO[Any]] _TXT = Union[bytes, Text] _CMD = Union[_TXT, Sequence[_TXT]] _ENV = Union[Mapping[bytes, _TXT], Mapping[Text, _TXT]] # Same args as Popen.__init__ def call(args: _CMD, bufsize: int = ..., executable: _TXT = ..., stdin: _FILE = ..., stdout: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., cwd: _TXT = ..., env: _ENV = ..., universal_newlines: bool = ..., startupinfo: Any = ..., creationflags: int = ...) -> int: ... def check_call(args: _CMD, bufsize: int = ..., executable: _TXT = ..., stdin: _FILE = ..., stdout: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., cwd: _TXT = ..., env: _ENV = ..., universal_newlines: bool = ..., startupinfo: Any = ..., creationflags: int = ...) -> int: ... # Same args as Popen.__init__ except for stdout def check_output(args: _CMD, bufsize: int = ..., executable: _TXT = ..., stdin: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., cwd: _TXT = ..., env: _ENV = ..., universal_newlines: bool = ..., startupinfo: Any = ..., creationflags: int = ...) -> bytes: ... PIPE = ... # type: int STDOUT = ... # type: int class CalledProcessError(Exception): returncode = 0 # morally: _CMD cmd = ... # type: Any # morally: Optional[bytes] output = ... # type: Any def __init__(self, returncode: int, cmd: _CMD, output: Optional[bytes] = ...) -> None: ... class Popen: stdin = ... # type: Optional[IO[Any]] stdout = ... # type: Optional[IO[Any]] stderr = ... # type: Optional[IO[Any]] pid = 0 returncode = 0 def __init__(self, args: _CMD, bufsize: int = ..., executable: Optional[_TXT] = ..., stdin: Optional[_FILE] = ..., stdout: Optional[_FILE] = ..., stderr: Optional[_FILE] = ..., preexec_fn: Optional[Callable[[], Any]] = ..., close_fds: bool = ..., shell: bool = ..., cwd: Optional[_TXT] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Optional[Any] = ..., creationflags: int = ...) -> None: ... def poll(self) -> int: ... def wait(self) -> int: ... # morally: -> Tuple[Optional[bytes], Optional[bytes]] def communicate(self, input: Optional[_TXT] = ...) -> Tuple[Any, Any]: ... def send_signal(self, signal: int) -> None: ... def terminate(self) -> None: ... def kill(self) -> None: ... def __enter__(self) -> 'Popen': ... def __exit__(self, type, value, traceback) -> bool: ... # Windows-only: STARTUPINFO etc. STD_INPUT_HANDLE = ... # type: Any STD_OUTPUT_HANDLE = ... # type: Any STD_ERROR_HANDLE = ... # type: Any SW_HIDE = ... # type: Any STARTF_USESTDHANDLES = ... # type: Any STARTF_USESHOWWINDOW = ... # type: Any CREATE_NEW_CONSOLE = ... # type: Any CREATE_NEW_PROCESS_GROUP = ... # type: Any
到此這篇關(guān)于python調(diào)用bash shell腳本方法的文章就介紹到這了,更多相關(guān)python調(diào)用bash shell腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python使用pyshp讀寫shp文件的實(shí)現(xiàn)
本文主要介紹了python使用pyshp讀寫shp文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03python實(shí)現(xiàn)大文本文件分割成多個(gè)小文件
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)大文本文件分割成多個(gè)小文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04opencv+python實(shí)現(xiàn)均值濾波
這篇文章主要為大家詳細(xì)介紹了opencv+python實(shí)現(xiàn)均值濾波,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02Python實(shí)現(xiàn)輸入二叉樹的先序和中序遍歷,再輸出后序遍歷操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)輸入二叉樹的先序和中序遍歷,再輸出后序遍歷操作,涉及Python基于先序遍歷和中序遍歷構(gòu)造二叉樹,再后序遍歷輸出相關(guān)操作技巧,需要的朋友可以參考下2018-07-07Python中列表索引 A[ : 2 ]與A[ : ,&nb
這篇文章主要介紹了Python中列表索引 A[ : 2 ]與A[ : , 2]的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Python 字典與字符串的互轉(zhuǎn)實(shí)例
下面小編就為大家?guī)硪黄狿ython 字典與字符串的互轉(zhuǎn)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01