iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python调用bash shell脚本方法
  • 483
分享到

python调用bash shell脚本方法

2024-04-02 19:04:59 483人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1. os.system()1.1. demo2. os.popen()2.1 demo3. commands模块4. subprocess4.1 demo1. os.syste

1. os.system()

help(os.system)

1.1. demo

  • os.system(command):该方法在调用完shell脚本后,返回一个16位的二进制数,
  • 低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,
  • 即脚本中exit 1的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情况下,
  • 则函数的返回值是0x0100,换算为十进制得到256。
  • 要获得os.system的正确返回值,可以使用位移运算(将返回值右移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):这种调用方式是通过管道的方式来实现,函数返回一个file对象,
里面的内容是脚本输出的内容(可简单理解为echo输出的内容),使用os.popen调用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),其以字符串的形式返回的是输出结果和状态码,即(status,output)。
  • (2)commands.getoutput(cmd),返回cmd的输出结果。
  • (3)commands.getstatus(file),返回ls -l file的执行结果字符串,调用了getoutput,不建议使用此方法

4. subprocess

subprocess模块,允许创建很多子进程,创建的时候能指定子进程和子进程的输入、输出、错误输出管道,执行后能获取输出结果和执行状态。

  • (1)subprocess.run():python3.5中新增的函数, 执行指定的命令, 等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。
  • (2)subprocess.call():执行指定的命令, 返回命令执行状态, 功能类似os.system(cmd)。
  • (3)subprocess.check_call():python2.5中新增的函数, 执行指定的命令, 如果执行成功则返回状态码, 否则抛出异常。

说明: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。否则默认已数组形式表示shell变量,如"ls”,"-l"。
当使用比较复杂的shell语句时,可以先使用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

到此这篇关于python调用bash shell脚本方法的文章就介绍到这了,更多相关python调用bash shell脚本内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python调用bash shell脚本方法

本文链接: https://www.lsjlt.com/news/161192.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python调用bash shell脚本方法
    目录1. os.system()1.1. demo2. os.popen()2.1 demo3. commands模块4. subprocess4.1 demo1. os.syste...
    99+
    2024-04-02
  • python调用bash shell脚本的方法是什么
    本篇文章为大家展示了python调用bash shell脚本的方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. os.system()help(os.system)1.1. d...
    99+
    2023-06-22
  • Bash Shell脚本中数组的使用方法
    这篇文章主要介绍“Bash Shell脚本中数组的使用方法”,在日常操作中,相信很多人在Bash Shell脚本中数组的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Bash Shell脚本中数组的使...
    99+
    2023-06-17
  • java中调用shell脚本的方法
    java中调用shell脚本的方法:1、在java项目中能够通过ProcessBuilder进行调度shell脚本,参数设置相对简单;2、还能够通过系统Runtime执行shell脚本,但在参数设置上需要添加空格将两个参数分开。具体内容如下...
    99+
    2024-04-02
  • nginx调用shell脚本的方法是什么
    在 Nginx 中调用 shell 脚本有多种方法,以下是其中的一些常用方法:1. 使用 Nginx 的 `ngx_http_she...
    99+
    2023-09-22
    nginx shell
  • golang调用shell脚本的方法是什么
    在Go语言中,可以使用os/exec包来调用shell脚本。 下面是一个示例代码: package main import ( ...
    99+
    2024-02-29
    golang shell
  • Shell脚本里调用Python程序
    脚本背景:主管要求看门狗程序不仅仅只是看门,还要在看门成功的时候发送邮件给各个开发人员,而且必须要用公司原有的python程序作为发送邮件的主程序,所以需要在原有的看门狗程序上加一句话,而这个看门狗程序恰恰是shell程序,两种不同程序混搭...
    99+
    2023-01-31
    脚本 程序 Shell
  • shell中如何调用python脚本
    要在shell中调用Python脚本,可以使用以下命令:```python script.py```其中,`python`是Pyth...
    99+
    2023-10-10
    shell python
  • 有哪些Bash脚本内置的调试方法
    本篇内容介绍了“有哪些Bash脚本内置的调试方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用 Bash 写的脚本也可以进行调试,和 Py...
    99+
    2023-06-09
  • java怎样调用shell脚本
    这篇文章主要介绍java怎样调用shell脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、通过ProcessBuilder进行调度这种方法比较直观,而且参数的设置也比较方便。ProcessBuilder&nbs...
    99+
    2023-06-15
  • JAVA如何调用Shell脚本
    在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本。JAVA...
    99+
    2023-05-31
    java shell脚本 ava
  • shell怎么调用perl脚本
    要在shell中调用Perl脚本,需要执行以下步骤:1. 确保已经安装了Perl解释器。可以在终端中输入perl -v来检查Perl...
    99+
    2023-10-21
    perl shell
  • node.js调用脚本(python/shell)和系统命令
    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.o...
    99+
    2024-04-02
  • Shell脚本中调用另一个Shell脚本的示例分析
    小编给大家分享一下Shell脚本中调用另一个Shell脚本的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!主要以下有几种方式:CommandExplana...
    99+
    2023-06-09
  • 如何在Shell脚本中调用另一个脚本
    如何在Shell脚本中调用另一个脚本?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。假如有脚本 first.sh:#!/bin/bash#------------------...
    99+
    2023-06-09
  • 怎么在Shell脚本中调用另一个脚本
    这期内容当中小编将会给大家带来有关怎么在Shell脚本中调用另一个脚本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。forkfork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调...
    99+
    2023-06-09
  • Linux Shell脚本调试模式的方法有哪些
    这篇文章主要介绍“Linux Shell脚本调试模式的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux Shell脚本调试模式的方法有哪些”文章能帮助大家解决问题。如何开始写一个脚...
    99+
    2023-06-27
  • PHP中shell脚本的使用方法
    今天就跟大家聊聊有关PHP中shell脚本的使用方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我们都知道,在计算机科学中,SHELL类似于DOS下的command.com。它接收...
    99+
    2023-06-17
  • Bash脚本中如何调用Java函数?
    Bash脚本是一种常用的命令行脚本语言,而Java是一种面向对象的编程语言。在实际的开发过程中,我们可能会遇到需要在Bash脚本中调用Java函数的情况。本文将介绍如何在Bash脚本中调用Java函数。 环境准备 在开始之前,我们需要...
    99+
    2023-08-19
    函数 bash spring
  • 通过Jython调用Python脚本的实现方法
    前言 前面在 BeanShell 里面是通过 java 脚本实现请求的预处理,jmeter里面也可以调用python的脚本,需安装 jython.jar 的插件. Jython 是 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作