首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python,Shell 和 三个标准文件

场景 使用 Python 执行 Shell 命令(或者脚本),有两种执行场景: 等待,直到命令执行完毕,一次性获取返回结果,做一些你想做事情; 命令执行同时,实时获取命令持续输出,做一些你想做事情...标准错误输出文件(stderr) 后两个文件对应终端屏幕,进程从标准输入文件得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件。...翻译一下: 与进程进行交互:将数据发送到 stdin。从 stdout 和 stderr 文件读取数据,直到达到文件结尾。等待进程终止。...这里其实是一个同步过程,进程终止后才会返回所读取到数据(进程终止,文件自然也结尾了),也就是 communicate() 方法直接使命令执行变为了同步,不执行完成就一直阻塞。...如果我们执行 ping zhihu.com 等不会自己终止命令,这种方式会一直卡死,因为进程一直没有结束,文件也一直不会结尾。 那么类似这种持续输出结果命令如何执行呢?

1.4K60

Python模块之subprocess用法实例详解

在python,我们通过标准库subprocess包来fork一个子进程,并且运行一个外部程序。...subprocess包定义有数个创建子进程函数,这些函数分别以不同方式创建子进程,所欲我们可以根据需要来从中选取一个使用。...os.popen() 执行操作系统命令,会将结果保存在内存当中,可以用read()方法读取出来 import os >>> res = os.popen("ls -l") # 将结果保存到内存 >...原来这个是一个管道,这个需要画一个图来解释一下: 4、poll() 定时检查命令有没有执行完毕执行完毕后返回执行结果状态,没有执行完毕返回None >>> res = subprocess.Popen...>>> res.stdout.read() b'' 7、pid 获取当前执行子shell程序进程号 import subprocess >>> res = subprocess.Popen("sleep

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

Python模块之subprocess

二 基础知识 Python2.4引入subprocess模块来管理子进程,可以像Linux 系统执行shell命令那样fork一个子进程执行外部命令,并且可以连接子进程output/input...Command '['ls', '-I']' returned non-zero exit status 1 >>> 通过上面三个例子,我们可以看出前面两个函数不容易控制输出内容,在使用subprocess包函数创建子进程执行命令时候...2) 如何处理函数返回信息(命令执行结果或者错误信息) 3) 当子进程执行失败也即returncode不为0时,父进程如何处理后续流程?...与上面第二部分介绍三个函数不同,subprocess.Popen() fork子进程之后主进程不会等待子进程结束,而是直接执行后续命令。...从执行结果上看,子进程 ping命令并未执行完毕subprocess.Popen()后面的命令就开始执行了。

1.9K10

记录Python 调用 subprocess.Popen 卡死解决办法

subprocess.Popen 是 Python 中用于执行外部命令或程序模块之一。它提供了创建子进程并与之交互灵活方式。...以向 subprocess.Popen 传递一个命令字符串或命令列表,它将调用操作系统 shell 来执行命令。...项目中需要在 Python 代码执行一些系统指令,例如调用项目中某个可执行程序,所以就使用了 subprocess.Popen 方法。...{cmds}") 这段代码是一个 Python 函数,用于执行外部命令并捕获其输出。接收传入系统命令,使用 subprocess.Popen 函数创建子进程执行指定命令。...原因就是:PIPE本身可容纳量比较小,所以程序会卡死,所以一大堆内容输出过来时候,会导致PIPE不足够处理这些内容 实际业务需求并不关心程序执行过程输出,只要知道最后执行结果即可,使用上面的

45310

python模块--subprocess

该模块拥有多个方法,具体如下: subprocess.call() 直接打印系统命令执行结果,如果执行成功,返回状态码为0,否则为1,例如: #执行成功 import subprocess CALL1...subprocess.check_output()     不会将系统命令执行结果直接打印出来,返回一个bytes类型对象,该对象包含了系统命令执行结果,如果执行失败会抛出subprocess.CalledProcessError...丢失), 往返行程估计时间(以毫秒为单位):     最短 = 0ms,最长 = 0ms,平均 = 0ms subprocess.Popen()     上面几个函数都是Popen()封装,主进程都会等待子进程执行完毕...,Popen()创建进程不会被等待,相当于异步执行。    ...1.Popen()创建对象有多个方法,可以针对子进程执行个性化操作,例如: import subprocess import time time.clock() POPEN1 = subprocess.Popen

64310

【module】subprocess

*等subprocess通过子进程执行外部指令,并通过input/output/error管道,获取子进程执行返回信息。...使用方法: 运行外部命令:subprocess.call(command) subprocesscall方法可以用于执行一个外部命令,但该方法不能返回执行结果,只能返回执行状态码: 成功(0) 或...与进程单向通信:通过Popen()方法调用命令执行结果,可以设置stdout值为PIPE,再调用communicate()获取结果,返回结果为tuple....在python3结果为byte类型,要得到str类型需要decode转换一下 输出结果(读) # 直接执行命令输出到屏幕 >>> subprocess.Popen("ls -l",shell=True...shtin来实现 # 以下实现打开python3终端,执行一个print命令 proc = subprocess.Popen(['python3'],stdin=subprocess.PIPE,stdout

1.8K40

python之路day5

subprocess模块 铺垫: 1、os模块 os模块system,使用os.system("dir")可直接输出结果,如果将os.system("dir")赋值给一个变量,则这个变量接收是这个命令执行成功与否...)此时是把命令执行结果保存在内存空间管道,如果输出到屏幕需要用res.stdout.read(),这里存在命令输入错误报错情况,如果报错会把错误直接输入到屏幕上,管道为空。...例2:poll()和wait()方法 在例1如果命令执行耗时很长,如:res=subprocess.Popen("sleep 10;echo 'hello'",shell=Ture,stdout=subprocess.PIPE...可用参数: args:shell命令,可以是字符串或者序列类型 cwd:用于设置子进程的当前目录 stdin,stdout,stderr:分别表示程序标准输入、输出、错误句柄 env:用于指定子进程环境变量...A 以上方法为新式类写法 如果把class A修改为经典类写法,其它保持不变,并在python2环境运行(在python3环境也遵循广度查询法) class A: def __init__(

61310

pythonsubprocess模块

另外,我们应该知道命令行指令 ​ ​执行通常有两个我们比较关注结果: 1 命令执行状态码--表示命令执行是否成功 ​ 2 命令执行输出结果--命令执行成功后输出 早期Python版本,...subprocess.check_call() Python 2.5新增函数。 执行指定命令,如果执行成功则返回状态码,否则抛出异常。...subprocess.check_output() Python 2.7新增函数。执行指定命令,如果执行状态码为0则返回命令执行结果,否则抛出异常。 ​...需要说明是,该方法在python3.x才有。 call()方法启动进程,其标准输入输出会绑定到父进程输入和输出。调用程序无法获取命令输出结果。...subprocess.Popen(): 在一些复杂场景,我们需要将一个进程执行输出作为另一个进程输入。在另一些场景,我们需要先进入到某个输入环境,然后再执行一系列指令等。

3K20

Python用subprocessPopen来调用系统命令

可是这两个命令过于简单,不能完毕一些复杂操作,如给执行命令提供输入或者读取命令输出,推断该命令执行状态,管理多个命令并行等等。...这时subprocessPopen命令就能有效完毕我们须要操作。在这里对Popen予以简介。...到如今还不清楚这个參数详细含义,望各个大牛指点。 參数executable用于指定可执行程序。普通情况下我们通过args參数来设置所要执行程序。...subprocess.call(*popenargs, **kwargs) 执行命令。该函数将一直等待到子进程执行结束,并返回进程returncode。文章一開始样例就演示了call函数。...在异常对象,包 括进程returncode信息。 subprocess模块内容就这么多。在Python手冊,还介绍了怎样使用 subprocess来替换一些老模块,老函数样例。

1.7K20

python subprocess模块

subprocess.call("df -lh",shell=True) 或者 subprocess.call(["df","-lh"]) 如果获取到执行内容: a...用于执行复杂系统命令 参数: args:shell命令,可以是字符串或者序列类型(如:list,元组) bufsize:指定缓冲。...,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用 close_sfs:在windows平台下,如果close_fds被设置为True,则新创建进程将不会继承父进程输入...CreateProcess()函数,用于设置子进程一些属性,如:主窗口外观,进程优先级等等 终端输入命令分为两种: 输入即可得到输出:如 ifocnfig 输入进行某环境,依赖某环境再输入...:如 python 需要交互命令示例: import subprocess obj = subprocess.Popen(["python"], stdin=subprocess.PIPE

97520

Python实现cmd命令连续执行

之前是写一个微信控制程序,通过登录网页微信,可以直接执行命令行代码。也不用ssh登录了,想法很方便。 但是现实很残酷,微信登录这块基本没有问题,已经有大佬写好了,但是命令执行遇到问题了。...运行cmd 开始时,使用os.popen()执行命令,但是该命令需要手动修改运行目录。此方案被我直接丢弃了。...单开进程 那么自然想到通过启动进程方式来实现,Python有对进程封装subprocess,可以通过创建Popen对象来实现。只要单开一个bash,与它进行交互就好啦。...注意:如果输入一个不存在命令,输出内容不在stdout流,要到stderr获取。...此方案暂时还不支持sudo命令,回头在研究研究 至此,其实还有一个小问题,怎么能知道哪些返回是同一条命令所返回呢?

3.8K10

Python脚本执行shell一个小问题

Python脚本执行shell一个小问题 在python脚本执行shell命令,可能是平常写脚本过程中比较常见一种场景,这两天在写程序时候发现一个问题,这里分享一下。...01 常用commands模块 就是写python时候,如果执行了一个命令,我们想知道它返回,一般是可以通过commands这个模块来处理比较习惯使用是commands.getstatusoutput...因为执行时间很长,所以有时候我们想要查询执行中间状态来确保当前程序依旧在执行,而不是挂掉了。commands.getstatusoutput是不能查看命令执行中间状态。...这个Popen类还有其他很有用函数,这里简要介绍,有需求可以去研究下: Popen.poll() 用于检查子进程命令)是否已经执行结束,没结束返回None,结束后返回状态码。...Popen.communicate(input=None, timeout=None) 该方法可用来与进程进行交互,比如发送数据到stdin,从stdout和stderr读取数据,直到到达文件末尾。

1.9K10

python多线程与多进程及其区别

大家好,又见面了,是你们朋友全栈君。 个人一直觉得对学习任何知识而言,概念是相当重要。掌握了概念和原理,细节可以留给实践去推敲。...阻塞挂起调用该函数线程,直到被调用线程执行完成或超时。...多线程执行 在主线程创建若线程之后,他们之间没有任何协作和同步,除主线程之外每个线程都是从run开始被执行直到执行完毕。...at: 1564906770.52 可以通过将创建线程指定为守护线程(daemon),这样主线程执行完毕之后会立即结束未执行线程,然后结束程序。...; 如果CPU和系统支持多线程与多进程,多个进程并行执行同时,每个进程线程也可以并行执行,这样才能最大限度榨取硬件性能; 线程和进程上下文切换 进程切换过程切换牵涉到非常多东西,寄存器内容保存到任务状态段

40510

项目总监必看:如何利用Git深度统计团队代码贡献?多语言实践教程揭秘!

使用Git命令统计代码提交情况:全面解析与多语言实现 摘要:你好,是猫头虎博主!最近在搜索引擎上发现,关于"如何使用Git命令统计代码提交情况"搜索量暴涨。...你可以将这个脚本保存为git_stats.sh,然后在项目目录运行它来获取统计信息。确保你脚本有执行权限(你可以使用chmod +x git_stats.sh来给它添加执行权限)。 2....Java实现统计功能 Java提供了ProcessBuilder来帮助我们执行和控制进程。我们可以利用这个特性来运行Git命令,并解析输出。...以下是一个简单Java实现思路: 使用ProcessBuilder调用Git命令:Java可以通过ProcessBuilder类来执行外部命令。你可以用它来运行Git命令,获取提交日志。...JGit 提供了一套 API,允许开发者在 Java 代码中直接与 Git 仓库进行交互,而不需要依赖命令 Git。 使用 JGit,你可以轻松地从 Java 程序访问和操作 Git 仓库。

8210
领券