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

当存在派生进程时,如何立即从主进程获取stdout值

当存在派生进程时,可以使用管道(pipe)来实现从主进程获取派生进程的stdout值。

管道是一种进程间通信(IPC)机制,可以在父子进程之间传递数据。具体步骤如下:

  1. 在主进程中创建一个管道,可以使用os.pipe()函数创建一个管道,返回两个文件描述符,一个用于读取(读端),一个用于写入(写端)。
  2. 创建派生进程,可以使用subprocess.Popen()函数创建派生进程。将参数stdout=subprocess.PIPE传递给Popen()函数,使派生进程的标准输出连接到管道的写端。
  3. 在主进程中从管道的读端读取派生进程的stdout值。可以使用os.read()函数从管道读取数据。

下面是一个示例代码:

代码语言:txt
复制
import os
import subprocess

def get_stdout_from_subprocess():
    # 创建管道
    read_end, write_end = os.pipe()

    # 创建派生进程
    p = subprocess.Popen(["command"], stdout=write_end)

    # 关闭管道的写端
    os.close(write_end)

    # 从管道的读端读取派生进程的stdout值
    stdout_value = os.read(read_end, 1024)

    # 关闭管道的读端
    os.close(read_end)

    return stdout_value.decode()

stdout_value = get_stdout_from_subprocess()
print(stdout_value)

在上面的示例中,subprocess.Popen(["command"], stdout=write_end)创建了一个派生进程,并将其标准输出连接到管道的写端。然后,使用os.read(read_end, 1024)从管道的读端读取派生进程的stdout值。

请注意,示例中的"command"应替换为实际的要执行的命令。

此外,针对派生进程的stdout值的处理可能需要更加详细的判断和处理逻辑,例如使用循环读取和处理分段数据,避免数据丢失或阻塞等情况。

对于腾讯云相关产品和产品介绍链接地址,可以参考腾讯云官方文档或网站获取最新的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Supervisor管理进程

也实现进程挂掉的时候,父进程可以准确获取进程挂掉的信息的,可以选择是否自己启动和报警。...日志文件备份数,默认是10 ; stdout 日志文件,需要注意指定目录不存在无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile=/var...启动实例的时候用来计算numprocs的 priority:权重,可以控制程序启动和关闭的顺序,权重越低:越早启动,越晚关闭。...false:进程不会自动重启,unexpected:程序退出的退出码不是exitcodes中定义的进程会重启,true:进程会无条件重启退出的时候。...stderr capture mode模式的时候,写入FIFO队列的最大bytes,单位可以是KB、MB、GB stdout_events_enabled:如果设置为true,进程在写它的stderr

6.5K1901

python模块之subprocess类与常量

stdin, stdout, stderr参数的特殊,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数的特殊,表示重定向标准错误到标准输出 Popen 在一个新的进程中执行子程序...bufsize:创建stdin/stdout/stderr管道文件对象作为对应的参数传递给open()函数。...stdin/stdout/stderr:分别指定程序执行的标准输入,标准输出,标准错误。可选包括PIPE,DEVNULL,已存在的文件描述符(正整数),已存在的文件对象,None。...如果传递给Popen的stdin参数不是PIPE,此属性为None stdout:与Popen.stdin相近,但stream对象是可读的 stderr:与Popen.stdout相近 pid:子进程进程号...如果设置了shell=True,pid表示派生shell的进程号 returncode:子进程返回码,None表示进程未终止。负数-N表示进程被信号N终止(仅限POSIX)。

2.5K10
  • python的subprocess模块

    universal_newlines: 该参数影响的是输入与输出的数据格式,比如它的默认为False,此时stdout和stderr的输出是字节序列;该参数的设置为Truestdout和stderr...0,直接返回输出结果,如果返回不为0,直接抛出异常。...直接使用Popen会对如何运行命令以及如何处理其输入输出有更多控制。如通过为stdin, stdout和stderr传递不同的参数。...() #终止子进程进程的单向通信 通过Popen()方法调用命令后执行的结果,可以设置stdout为PIPE,再调用communicate()获取结果 返回结果为tuple....ID Popen.returncode 获取进程状态码,0表示子进程结束,None未结束 在使用Popen调用系统命令式,建议使用communicate与stdin进行交互并获取输出(stdout),

    3K20

    1、git bash 获取分支信息

    1、git bash 获取分支信息 # 获取当前分支名 git rev-parse --abbrev-ref HEAD git branch --show-current # 获取当前hash git...请看下文 2、JavaScript 通过 execa 插件获取项目分支信息 execa具备如下特点: Promise接口 从输出中删除最后的换行符,这样您就不必执行stdout.trim() 支持跨平台的...在父进程终止清除派生进程。 从 stdout和stderr获得交错输出,类似于在终端上打印的输出。(异步) 可以指定文件和参数作为一个单一的字符串没有外壳 更具描述性的错误。...']); console.log(stdout); //=> 'unicorns' })(); // stdout 表示执行命令的输出结果 /*{ command: 'echo unicorns...failed: false, timedOut: false, isCanceled: false, killed: false }*/ execa还可以执行脚本命令,并输出结果,下面看一下如何在代码里面获取当前操作的分支

    1.2K20

    Supervisor使用详解

    一、supervisor简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出能自动重启。...也实现进程挂掉的时候,父进程可以准确获取进程挂掉的信息的,可以选择是否自己启动和报警。...子进程配置文件路径:/etc/supervisord.d/ 注:默认子进程配置文件为ini格式,可在supervisor配置文件中修改。...= 20 ; stdout 日志文件备份数,默认是10 ; stdout 日志文件,需要注意指定目录不存在无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile...=/opt/apache-tomcat-8.0.35/logs/catalina.out stopasgroup=false ;默认为false,进程被杀死,是否向这个进程组发送stop信号,

    60820

    python之路day5

    =subprocess.PIPE)此时是把命令执行结果保存在内存空间的管道中,如果想输出到屏幕需要用res.stdout.read(),这里存在命令输入错误报错的情况,如果报错会把错误直接输入到屏幕上,...,stderr=subprocess.PIPE),使用res.stdout.read()时会等待命令执行结束才能显示,而poll方法可检测命令是否执行结束,0表示执行结束,在编程可与read结合使用...可用参数: args:shell命令,可以是字符串或者序列类型 cwd:用于设置子进程的当前目录 stdin,stdout,stderr:分别表示程序的标准输入、输出、错误句柄 env:用于指定子进程的环境变量...Inheritance继承:一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承。 Polymorphism多态:一个接口,多种实现。...指一个基类中派生了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。

    63110

    Supervisor | 笔记

    ,默认是3 user=tomcat ; 用哪个用户启动进程,默认是root priority=999 ; 进程启动优先级,默认999,小的优先启动 redirect_stderr...= 20 ; stdout 日志文件备份数,默认是10 ; stdout 日志文件,需要注意指定目录不存在无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile...=/opt/apache-tomcat-8.0.35/logs/catalina.out stopasgroup=false ;默认为false,进程被杀死,是否向这个进程组发送stop信号,...默认为1 startsecs=1 # 脚本运行的用户身份 user = test # 日志输出 stderr_logfile=/tmp/blog_stderr.log stdout_logfile...托管服务管理 supervisorctl status # 查看当前管理的子进程 supervisorctl reload # 配置发生改变,进行热部署 supervisorctl restart

    1.1K20

    上周并发题的解题思路以及介绍Go语言调度器

    限时5秒,使用多个goroutine查找切片中是否存在给定,在找到目标值或者超时后立刻结束所有goroutine的执行。...线程是操作系统调度的最基本单元,而 Linux 在调度器并不区分进程和线程的调度,它们在不同操作系统上也有不同的实现,但是在大多数的实现中线程都属于进程。 多个线程可以属于同一个进程并共享内存空间。...一个用户态线程必须要绑定一个内核态线程,但是CPU并不知道有用户态线程的存在,它只知道它运行的是一个内核态线程(Linux的PCB进程控制块)。...M:线程想运行任务就得获取P,从P的本地队列获取G,P队列为空,M也会尝试从全局队列拿一批G放到P的本地队列,或从其他P的本地队列偷一半放到自己P的本地队列。...hand off机制,本线程因为G进行系统调用阻塞,线程释放绑定的P,把P转移给其他空闲的线程执行。

    49340

    Supervisor多进程管理 异常自动重启 可视化管理

    systemctl restart supervisord 2、可视化界面管理 可视化界面在软件的不同开发阶段采用不同的策略,项目开发和测试阶段,为了提高开发效率,往往开启可视化界面,项目开发完毕进行交付...1、刷新子服务列表 添加新加入子服务,需要刷新列表,服务方能纳入管理范畴。 (1)reload 如果不指定子服务名称,默认重新启动所有的子服务列表。...2、priority priority参数越大,优先级越低。 3、environment 如果子应用无法获取系统环境变量,那么可显式指明特定环境的路径。...进程未显示的指明日志文件路径,默认日志文件存在于/tmp路径下。...此配置存在配置文件,非子进程配置文件。

    1.5K30

    【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…

    O_CREAT代表打开文件如果不存在,就创建一个文件,如果没有这个宏,且打开了一个不存在的文件,则会报错,0666是设置的文件的起始权限,如果不想受到父进程shell的umask0002的影响的话,可以通过系统调用...fd为-1表示文件打开出现错误,返回正数表示文件打开成功。...当关闭0或2,打印出来的log.txt对应的fd的就是对应的关闭的0或2的,而当关闭1,显示器不会显示对应的fd的。...fd,就会出现0。...因为命令是子进程执行的,所以重定向的工作也一定是子进程来执行的,但是如何重定向,重定向的类型,重定向的目标文件,这些都是父进程来提供给子进程的。 3.

    1.2K30

    使用python执行shell脚本 并动态传参 及subprocess的使用详解

    负bufsize意味着使用系统默认,通常意味着完全缓冲。bufsize的默认是0(无缓冲)。 stdin,stdout和stderr分别指定执行的程序的标准输入,标准输出和标准错误文件句柄。...在Popen对象中,可以设subprocess.stdout=PIPE 即通过管道 p.stdout.read()取出 该进程的标准输出 preexec_fn 如果将preexec_fn设置为可调用对象...注意:此功能仅在Python是使用通用换行支持(默认)构建才可用。此外,文件对象stdout,stdin和stderr的newlines属性不会被communications()方法更新。...他们可以指定诸如窗口的外观和新过程的优先级等内容。...返回一个元组(stdout,stderr) 但是读取的数据缓存在内存中,所以如果数据量很大或者无限,就不要使用这种方法 Popen.pid 返回子进程的pid Popen.returncode 读取进程的状态码

    5.5K30

    将Python和R整合进一个数据分析流程

    命令行执行和执行子进程 为了更好地理解在执行子进程的时候发生了什么,值得重新考虑命令行运行一个Python 或 R进程中更多的细节。...然而,这可能让一个Python或R进程直接去执行另一个类似的命令。这样有好处,即从一个Python父进程启动一个R中的子进程去运行特定的脚本,进而完成分析。...我们人为降低了每个案例中分析结果的重要性,以便把重点放在机器是如何的实现的过程上。 R脚本范例 我们简单的R脚本例子要从命令行获取一系列数字并返回最大。...(pattern) #把所产生的元素列表合成一个新命令行 # 分割字符串并打印 print('\n'.join(ans)) 在R中调用Python 当用R执行子进程,建议使用 R 的system2函数来执行并获取输出...stdout=TRUE,退出状态存储在一个名为“状态”的属性中。 总结 通过子进程调用,可以将Python和R整合到一个应用程序中。

    2.4K80

    将Python和R整合进一个数据分析流程

    命令行执行和执行子进程 为了更好地理解在执行子进程的时候发生了什么,值得重新考虑命令行运行一个Python 或 R进程中更多的细节。...然而,这可能让一个 Python或R进程直接去执行另一个类似的命令。这样有好处,即从一个Python父进程启动一个R中的子进程去运行特定的脚本,进而完成分析。...我们人为降低了每个案例中分析结果的重要性,以便把重点放在机器是如何的实现的过程上。 R脚本范例 我们简单的R脚本例子要从命令行获取一系列数字并返回最大。...stdout=TRUE,退出状态存储在一个名为“状态”的属性中。 总结 通过子进程调用,可以将Python和R整合到一个应用程序中。...这允许一个父进程调用另一个进程作为子进程,并获取任何输出到标准输出的结果。 来源:大数据文摘

    3.1K80

    腾讯2014校园招聘软件开发类笔试试题

    C.3 8 2 5 1 6 7 4  D.8 2 3 5 1 4 7 6 解析:     堆排序:利用堆的性质进行的一种选择排序     答案:A 5 n=5,下列函数的返回是:()...解析: 派生类中不含对象成员 在创建派生类对象,构造函数的执行顺序是:基类的构造函数→派生类的构造函数; 在撤消派生类对象,析构函数的执行顺序是:派生类的构造函数→基类的构造函数。...派生类中含有对象成员 在定义派生类对象,构造函数的执行顺序:基类的构造函数→对象成员的构造函数→派生类的构造函数; 在撤消派生类对象,析构函数的执行顺序:派生类的构造函数→对象成员的构造函数...,允许一个请求进入临界区的进程立即进入临界区,以有效利用临界资源 忙则等待:已有进程处于临界区,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问 有限等待:对要求访问临界资源的进程...,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态 让权等待:进程不能进入自己的临界区,应立即释放处理机,以免进程陷入“忙等”状态 24 进程进入等待状态有哪几种方式?

    74920

    Supervisor进程管理工具快速入门与使用

    实现进程挂掉的时候,父进程可以准确获取进程挂掉的信息的,可以选择是否自己启动和报警。...不为1,就是进程池的概念,注意process_name的设置默认为1 ; 非必须设置 ;directory=/tmp ; #脚本启动运行目录 ;umask=022...默认为1 ;startretries=3 ; #启动串行启动失败尝试的最多次数(默认3次),超过后supervisor将把此进程的状态置为FAIL ;autorestart...listener处于就绪状态后,supervisord产生的event在listener的配置的可接受的events中,supervisord就会把该event发送给该listener。...OptionParser import socket import fcntl import struct __doc__ = "\033[32m%s,捕获PROCESS_STATE_EXITED事件类型,异常退出触发报警

    97411

    Python 执行系统命令

    print(a) # 理论上command是一个字符串,但实际看command还是得变为字节数组 # 命令中存在中文可能会报编码错误,此时可以自己给命令编一下码 # exit_code = os.system...如果env=None,则默认从父进程继承环境变量 universal_newlines 不同系统的的换行符不同,该参数设定为true,则表示使用\n作为换行符。...同样,如果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。 4、Popen.send_signal(signal):向子进程发送信号。...10、Popen.pid:获取进程进程ID。 11、Popen.returncode:获取进程的返回。如果进程还没有结束,返回None。...需要设置shell=True(False,arges是列表,第一个参数是shell命令,后面的都是参数’,’ 隔开),须把args设为string,空格隔开,如下 >>> a = subprocess.Popen

    1.7K10
    领券