【process.popen】

article/2025/11/2 17:13:04

原文链接:https://blog.csdn.net/liuyingying0418/article/details/100939697

subprocess.Popen()用法
subprocess.Popen()主要是用来在python中实现多进程程序。例如,在python脚本中,我们需要执行另一个python脚本,或者执行shell命令或者shell脚本,这种情况下就要用到python的多进程方法了。本文仅介绍subprocess.Popen()方法,python多进程还有很多其他方法,参考:多进程–廖雪峰

subprocess.Popen()的使用格式:
————————————————
class subprocess.Popen( 
      args, 
      bufsize=0, 
      executable=None,
      stdin=None,
      stdout=None, 
      stderr=None, 
      preexec_fn=None, 
      close_fds=False, 
      shell=False, 
      cwd=None, 
      env=None, 
      universal_newlines=False, 
      startupinfo=None, 
      creationflags=0)
 


各个参数的含义:


Popen的属性


子进程结束的判断

import subprocess as sp
p = sp.Popen(['echo','helloworl.py'], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
print(p.poll())
print('Exit code:', p.returncode)
 


打印结果如下,在上述代码中我们仅仅创建了一个Popen对象,然后开启了子进程,随后通过poll()和returncode查看子进程的返回码,从结果来看,子进程没有结束主进程就退出了。

None
Exit code: None

下面我们通过读取stdout的内容来看看子进程会不会正常结束:

import subprocess as sp
p = sp.Popen(['echo','helloword.py'], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
print((p.stdout.readlines())[0].decode(), end='')
print(p.poll())
print('Exit code:', p.returncode)

结果如下,可以看到,结果仍然是子进程没有结束。

helloword.py
None
Exit code: None

前面说到,wait会等待子进程结束,那么我们试试执行wait看看:

import subprocess as sp
p = sp.Popen(['echo','helloword.py'], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
print(p.poll())
print(p.wait())
print('Exit code:', p.returncode)

结果可以看到,在wait之前子进程并没有结束,wait执行返回的值0,returncode也是0,表明子进程正常执行并结束了。

None
0
Exit code: 0

虽然wait可以让子进程正常结束,但是如果缓存中太多数据的话会导致死锁,因此我们采用communicate:

import subprocess as sp
p = sp.Popen(['echo','helloword.py'], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
output, err = p.communicate()
print(output.decode('gbk'), end='')
print(err.decode('gbk'))
print(p.poll())
print('Exit code:', p.returncode)

结果如下,可见在communicate之后,子进程正常执行,缓存中的数据被读取出来,poll和returncode都返回0,表明子进程已正常结束。output是子进程执行输出的信息,err是执行异常时的报错信息,此处可以看到报错信息为空,说明子进程顺利执行,没有错误发生。

helloword.py

0
Exit code: 0
 

 


http://chatgpt.dhexx.cn/article/i3eLWIGL.shtml

相关文章

一文读懂 ChIPseq

文章目录 一、介绍二、测序原理三、检测蛋白质与DNA序列的结合峰1、测序片段匹配到参考基因组2、检测峰3、提高峰质量 四、影响ChIPseq测序结果的因素1、免疫共沉淀的影响2、测序的影响测序深度的对组蛋白修饰检测的影响3、重复样和重现性 一、介绍 ChIP-seq,测序方…

怎样理解SPI总线时钟的极性(CPOL)与相位(CPHA)?

转自 https://zhuanlan.zhihu.com/p/32803973 在单片机与外围设备的通信中,SPI总线是一种常用的通信方式。SPI是英文"Serial Periphral Interface"的缩写,中文翻译为"串行外围设备接口"。今天这篇文章,我们就来谈谈SPI通…

Python 之 cPickle用法

欢迎大家扫码关注我的微信公众号: Python 之 cPickle 用法 - 目录 一、概述二、序列化与反序列化的几个常用方法2.1 dump() 与 load()2.2 dumps() 与 loads()2.3 带 s 与不带 s 的区别 三、cPickle 类的孪生—— pickle 一、概述 序列化 (Serializatio…

HDU 2509 Nim博弈变形

1、HDU 2509   2、题意:n堆苹果,两个人轮流,每次从一堆中取连续的多个,至少取一个,最后取光者败。 3、总结:Nim博弈的变形,还是不知道怎么分析,…

LibreOJ #2509.「HNOI2018」排列 贪心+堆

题意 n<500000 分析 不难分析到其实就是有一棵树&#xff0c;然后每次要选一个节点。在选某个节点时必须先选其父节点&#xff0c;第i个选的节点的系数为i&#xff0c;问最大的权值和。 先这么想&#xff0c;对于一个最权值小的节点&#xff0c;当我们选了其父亲后&#…

hdu2509 Be the Winner (反尼姆博弈 )

hdu2509 Be the Winner Problem Description Let’s consider m apples divided into n groups. Each group contains no more than 100 apples, arranged in a line. You can take any number of consecutive apples at one time. For example “” can be turned into “” …

本地win10安装的MySQL8.0.12用navicat12报错 2509 -Authentication plugin ' caching_sha2_password' cannot be :

本地安装了MySQL8.0.12用navicatl 12报错了&#xff0c;报错请款如下: 网上很多的方法都是说在my.ini 文件中添加 default_authentication_pluginmysql_native_password&#xff1b; 我知道有的人的是可以的&#xff0c;但是我的报错 然后有需要修改my.ini文件 最后一行加上…

学习MySQL的第二天,安装MySQL的远程连接工具与解决2509的报错

1&#xff0c;下载并安装MySQL的远程连接工具 安装MySQL远程连接工具结果都一样哈&#xff0c;都是为了方便快捷&#xff0c;点击下方连接从“sqlyogcommunity官网”来下载安装。 https://github.com/webyog/sqlyog-community/wiki/Downloads 下载完后就可以来安装了&#xff…

nivicat破解包安装以及问题解决。MySQL安装版本Navicat连接报错2509解决方案

nivicat安装步骤 https://blog.csdn.net/yhflyl/article/details/95779920。 安装之后出现两个问题&#xff1a; 如图所示&#xff1a;网上查询过后&#xff0c;发现这个错误出现的原因是在mysql8之前的版本中加密规则为mysql_native_password&#xff0c;而在mysql8以后的加…

MySQL安装版本Navicat连接报错2509解决方案

MySQL安装版本Navicat连接报错2509解决方案 【问题产生】 新安装后打开数据库连接报错 【产生原因】 由于新版本的MySQL新特性导致的。 mysql> select Host,User,plugin from mysql.user; ------------------------------------------------- | Host | User | plugin | --…

Windows无法连接到Group Policy Client服务

Citrix XenApp服务器通过PVS启动后&#xff0c;用户访问出现如下的报错&#xff1a; 此报错是由于该Windows服务器的 Group Policy服务没有启动导致的&#xff0c;可以直接登录到该服务器开启Group Policy的服务即可。 但是如果你有好多好多的服务器&#xff0c;你也不知道哪个…

Circumventing Group Policy Settings

Group policy settings are an integral part of any Windows-based IT environment. If you’re a network administrator you use them to enforce corporate security and desktop management policy, and if you’re a user you’ve almost certainly been frustrated by t…

GPP(Group Policy Preferences)策略组首选项漏洞

概念 组策略是配配置计算机中某一些用户组策略的程序 SYSVOL是AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹&#xff0c;所有域内主机都能访问&#xff0c;里面保存组策略相关数据&#xff0c;包含登录脚本配置文件等 dir /s /a \\域控IP\SYSVOL\*.xml GPO是组策…

Group Policy Client解决方法

最近我同学的电脑遇到了这样的一个问题&#xff1a; 在开机登录界面时无法进入&#xff0c;提示Group Policy Client服务未能登录 其实在开始我也没遇到这样的问题&#xff0c;上网查了很久的资料&#xff0c;最后终于让我给解决了&#xff0c;呵呵…… 现在我就把我的解决方…

windows无法连接到group policy client服务.此问题阻止标准用户登陆系统.

问题描述如图&#xff1a; 解决&#xff1a; 1.winR 输入 regedit,打开注册表编辑器 2.对上图区域右键->权限 3.选定你的用户&#xff0c;点添加->高级->立即查找 4.找到SYSTEM&#xff0c;点击确定 5.然后注册框中出现&#xff0c;点确定&#xff0c;然后重启&#…

Powershell如何修改组策略(group policy)

上一篇&#xff0c;田总手把手给指导了如何实现多跳&#xff0c;手动实现的&#xff0c;没有问题。但是机器众多&#xff0c;这一篇我们用命令来实现组策略的修改。 首先&#xff0c;Powershell不是万能的&#xff0c;Powershell是可以获取到域的组策略(GPO)&#xff0c;并且权…

计算机 服务未能登陆,w7电脑开机提示Group Policy Client服务未能登陆的修复方法...

‍ ‍ w7系统是目前比较多用户自己使用的系统&#xff0c;比较普遍&#xff0c;但是出现的故障也比较多&#xff0c;一般都是大家能自己动手解决的。那么w7电脑开机提示Group Policy Client服务未能登陆怎么回事&#xff1f;要怎么处理这个问题&#xff1f;下面小编就以w732位旗…

win7服务器未能登录怎么解决,win7开机提示group policy client服务未能登录拒绝访问怎么办...

‍‍ 有些win7专业版用户在电脑开机的时候提示group policy client服务未能登录拒绝访问&#xff0c;导致无法进入系统开不了机&#xff0c;遇到这种情况该怎么办呢&#xff1f;group policy client服务用于应用由这台计算机的管理员或者其他用户通过组策略组件配置的设置&…

计算机服务 访问拒绝,Win7开机提示group policy client服务未能登录,拒绝访问的解决方法...

我们在使用电脑的过程中&#xff0c;经常会遇到一些小问题&#xff0c;尤其是电脑开机之后的问题最为常见。近期有一位用户遇到电脑开机提示“group policy client服务未能登录,拒绝访问”。那么我们要如何解决这个问题呢&#xff1f;下面装机之家分享一下Win7开机提示group po…

故障:ID1085 的 GroupPolicy 警告日志

1、故障现象: 1)Windows Server 2008 with SP2 的域控制器上,每隔 5 分钟,在 System Log 中出现 ID1085 的 GroupPolicy 警告日志: 2)同时,在 Application Log 中出现 ID8194 的 Group Policy Services 错误日志: 2、故障处理: 1)删除文件夹: C:\ProgramData\Appl…