首页
学习
活动
专区
圈层
工具
发布

Python subprocess模块替换教程 - 安全高效的子进程管理方案

第三方替代方案Python社区提供了多个优秀的subprocess替代库:sh模块将系统命令作为函数导入,提供直观的API安装:pip install sh优点:语法简洁,类函数式调用Plumbum功能丰富的进程管理库...模块替换subprocesssh模块提供了一种更Pythonic的方式来执行系统命令:# 安装sh模块# pip install shimport sh# 执行简单命令print(sh.ls("-l",..."/tmp"))# 带参数的命令sh.git("clone", "https://github.com/user/repo.git")# 捕获输出result = sh.echo("Hello, World...()sh模块的优点:更直观的命令调用方式自动处理管道和错误流支持超时设置提供后台执行功能简化输出捕获使用Plumbum进行高级进程管理Plumbum提供了更丰富的功能,特别适合复杂的命令链:from plumbum...Python subprocess模块有多种方法:方案适用场景优点sh模块简单命令执行API简洁,学习曲线低Plumbum复杂命令链功能强大,支持高级特性自定义封装避免第三方依赖完全可控,轻量级选择建议

8600
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    sh: 在Python中直接调用shell命令的库

    Python模块sh(通常指的是sh库,也被称为python-sh或sh.py)是一个用于在Python中直接调用shell命令的库。...它允许你像调用Python函数一样调用shell命令,并且具有一些额外的功能,如命令链式调用、管道、捕获输出等。...一、简介sh库提供了一种方便的方式来在Python脚本中执行shell命令,并且无需手动处理输入/输出流或错误。这使得在Python中执行复杂的shell任务变得更加简单和直观。...二、安装你可以使用pip来安装sh库:pip install sh三、基本使用3.1 导入sh模块首先,你需要在Python脚本中导入sh模块:from sh import ls, cat, grep注意...stdout和stderr属性来捕获命令的输出和错误:# 捕获输出result = ls('-l').stdout.strip()print(result)# 捕获错误(如果命令执行失败)try:

    35810

    Python中os.system()、subprocess.run()、call()、check_output()的用法

    =True, text=True, # 注意:这里必须 shell=True 才能捕获到 /bin/sh 的输出错误 # 当 shell=False 时,是要去捕获 "abcdefg"...命令自身输出的内容,但是它不存在,python 会报错 stdout=subprocess.PIPE, stderr=subprocess.STDOUT # 标准错误重定向到标准输出) print...("STDOUT:", ret.stdout) # STDOUT: /bin/sh: abcdefg: command not found另一个用于测试 shell 参数区别的示例如下...:这个方法的返回值是命令的退出码,而不是一个对象,所以无法像 subprocess.run() 一样捕获命令输出内容(不要设置 stdout=PIPE 或 stderr=PIPE,否则可能造成命令卡死)...= ["python", sys.argv[0], "--run-child"] ret = subprocess.check_output(cmd, stderr=subprocess.STDOUT

    1.1K20

    正确的使用python调用shell的姿势

    下面我们看如何使用python与shell交互: 方式一: 使用os.system方法 import osos.system("ls") 保存到一个python文件xxx.py里面执行 python xxx.py...stderr 方式三:看到上面这些这么繁琐的调用,后面就又有了最强大的subprocess模块,subprocess模块的出现是用来替代OS模块中的system()和popen()方法的,官方推荐的是只用...stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄 preexecfn:只在 Unix 平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用..., stderr, return_code ok,同样的调用脚本,这个函数会等整个shell执行结束后,输出结果: out, err, code= normal_run_command("sh xs.sh...")print out 至此,我们已经介绍完了如何使用python和shell交互的方式,通过这种方式我们可以很轻松开发一个自动化作业,比如系统参数初始化,使用yum安装各种软件,各种业务项目的部署,启动

    7.8K20

    Python模块之subprocess用法实例详解

    subprocess用来替换多个旧模块和函数: os.system os.spawn* os.popen* popen2.* commands.* 运行python的时候,我们都是在创建并运行一个进程,...linux中一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。...在python中,我们通过标准库中的subprocess包来fork一个子进程,并且运行一个外部的程序。...二、旧有模块的使用 1.os.system() 执行操作系统的命令,将结果输出到屏幕,只返回命令执行状态(0:成功,非 0 : 失败) import os >>> a = os.system("df -...>>> res.stdout.read() b'' #标准错误中有错误信息 >>> res.stderr.read() b'/bin/sh: lm: command not found\n' 注意:上面的提到的标准输出都为啥都需要等于

    27K32

    python中的subprocess

    python2.7 源码中的注释(由于能力有限,翻译的不太准确): 这个模块允许您开启进程、连接输入、输出和错误的管道,并获取他们的返回代码。...此外,标准错误可以用STDOUT来定义,表明应用程序应该从STDOUT捕获到相同的文件句柄的标准错误数据。 如果preexec_fn设置为一个可调用对象,该对象将在子进程执行之前调用。...在python程序中都是看作为\n 注意: 这种功能仅仅支持用通用换行符构建的python(默认)。同时文件对象标准输出、标准输入、标准错误的换行符属性,不会被communicate()模块所更新。...Example:     check_call(["ls", "-l"]) check_output(*popenargs, **kwargs):     运行带参数的命令并且以字节字符串来返回。    ...=PIPE, stderr=PIPE, close_fds=True) (child_stdin, child_stdout, child_stderr) = (p.stdin, p.stdout

    1.8K30

    python subprocess模块

    subprocess模块 允许你生成一个或多个进程,并且可以跟它交互,并且获取返回的结果,这个模块想要替换掉几个老的方法: os.system os.spawn*...run()方法在python3.5才有,python2.x没有,2.x用subprocess.call(),当然python3.X版本也支持call() 常见的subprocess方法 subprocess.call...terminate() 杀掉所启动进程 communicate() 等待任务结束 stdin 标准输入 stdout 标准输出 stderr 标准错误 pid The process ID...0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲 stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄 preexec_fn:只在Unix平台下有效...所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。

    1.2K20

    深入理解Node.js的进程与子进程

    从文档出发,管中窥豹,进一步认识和学习 process 模块:如何处理命令参数?如何处理工作目录?如何处理异常?如何处理进程退出?...捕获了错误信息,并且进程以0退出。开发者可以在 uncaughtException 事件中,清除一些已经分配的资源(文件描述符、句柄等),不推荐在其中重启进程。...比如前一段代码中,如果出现未被捕获的 promise 回调的异常,那么就会触发 warning 事件。如何处理进程退出?...: ${stdout}`); console.error(`stderr: ${stderr}`);});父子进程通信fork()返回的 ChildProcess 对象,监听其上的 message...默认情况下,子进程的 stdin、 stdout 和 stderr 会被重定向到 ChildProcess 对象上相应的 subprocess.stdin、subprocess.stdout 和 subprocess.stderr

    2.3K21

    Python模块学习:subprocess模块详解

    它们隐式的调用系统shell,并且不保证其他函数所具有的安全性和异常处理的一致性。另外,它们从Python 3.3.4开始才支持Windows平台。...run()函数默认不会捕获命令执行结果的正常输出和错误输出,如果我们向获取这些内容需要传递subprocess.PIPE,然后可以通过返回的CompletedProcess类实例的stdout和stderr...;check_output()函数默认就会返回命令执行结果,所以不用设置stdout的值,如果我们希望在结果中捕获错误信息,可以执行stderr=subprocess.STDOUT。...如果run()函数被调用时指定stderr=subprocess.STDOUT,那么stdout和stderr将会被整合到这一个属性中,且stderr将会为Nonestderr: 从子进程捕获的stderr...stdin, stdout, stderr: 分别表示程序标准输入、输出、错误句柄。preexec_fn: 用于指定一个将在子进程运行之前被调用的可执行对象,只在Unix平台下有效。

    3.7K40

    用Python远程登陆服务器的最佳实践

    使用 sh.ssh 首先来介绍第一个,sh.ssh sh 是一个可以让你通过函数的调用来完成 Linxu/OSX 系统命令的一个库,非常好用,关于它有机会也写篇介绍。...$ python3 -m pip install sh 今天只介绍它其中的一个函数:ssh 通常两台机器互访,为了方便,可设置免密登陆,这样就不需要输入密码。...问题就来了,要输入密码,必须得使用交互式的方法来输入呀,在 Python 中要如何实现呢?..., stderr = ssh.exec_command('ls -l') # 结果放到stdout中,如果有错误将放到stderr中 print(stdout.read()) # 关闭连接 ssh.close...写在最后 经过了一番对比,和一些实例的展示,可以看出 Paramiko 是一个专业、让人省心的 ssh 利器,个人认为 Paramiko 模块是运维人员必学模块之一,如果你恰好需要在 Python 代码中实现

    3.1K20

    python模块之subprocess类与常量

    stdin, stdout, stderr参数的特殊值,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数的特殊值,表示重定向标准错误到标准输出 Popen 在一个新的进程中执行子程序...在POSIX系统,shell=True默认使用/bin/sh作为shell。...如果未捕获标准输出返回None stderr:捕获的子进程的标准错误,默认为byte类型,如果run()函数调用时指定了encoding或errors,或设置了text=True则为string类型。...subprocess模块的异常基类 subprocess.TimeoutExpired 子进程执行超时。...属性 cmd:指令 timeout:秒为单位的时间 output:run()或check_output()函数捕获到的子进程的输出,否则为None stdout:output属性别名 stderr:run

    2.7K10

    Python subprocess与命令行交互

    Python subprocess 模块是一个功能强大的库,用于启动和与子流程交互。 它附带了一些高级 api,比如调用、检查输出和运行,这些都集中在的程序运行和等待完成的子进程上。...然后,proc.communicate等待子进程退出并捕获所有的标准输出。 Communicate 有一个非常方便的超时参数,让知道子进程是否由于某种原因没有退出。...标准 i/o 意味着可以按行使用(想想所有的 Unix 命令行工具是如何工作的) ; 如果需要子行粒度,stdout 不是正确的方法(使用套接字或其他方法)。...如果不想仅仅打印捕获的 stdout,而是要对其进行处理(比如寻找预期的模式) ,那么可以使用 Python 的线程安全队列进行组织。...注意,也可以在这里使用communicate,而不是等待来捕获 stderr 输出。 使用非阻塞读线程和可阻塞线程进行交互 最后的示例演示了一个稍微更高级的场景。

    8K22

    Python模块之subprocess

    一 简介 在使用Python 开发MySQL自动化相关的运维工具的时候,遇到一些有意思的问题,本文介绍Python的 subprocess 模块以及如何和MySQL交互具体操作,如启动 ,关闭 ,备份数据库...二 基础知识 Python2.4引入subprocess模块来管理子进程,可以像Linux 系统中执行shell命令那样fork一个子进程执行外部的命令,并且可以连接子进程的output/input...2) 如何处理函数返回的信息(命令执行的结果或者错误信息) 3) 当子进程执行的失败也即returncode不为0时,父进程如何处理后续流程?.../stderr 为None时表示没有任何重定向,继承父进程,还可以设置为PIPE 创建管道/文件对象/文件描述符(整数)/stderr 还可以设置为 STDOUT 后面会给出常见的用法 shell...同样,如果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。

    2.2K10
    领券