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

重复写入stdin并从python中读取进程的stdout

重复写入stdin并从Python中读取进程的stdout是一种常见的编程需求,可以通过以下步骤实现:

  1. 创建一个子进程,并与其建立通信管道。
  2. 在父进程中,通过管道的写入端(stdin)向子进程发送数据。
  3. 在子进程中,通过管道的读取端(stdout)接收数据。
  4. 在父进程中,通过管道的读取端(stdout)读取子进程的输出。

下面是一个示例代码,演示了如何实现这个过程:

代码语言:python
代码运行次数:0
复制
import subprocess

def communicate_with_process(input_data):
    # 创建子进程并建立通信管道
    process = subprocess.Popen(['python', 'your_script.py'], 
                               stdin=subprocess.PIPE, 
                               stdout=subprocess.PIPE,
                               universal_newlines=True)

    # 向子进程写入数据
    process.stdin.write(input_data)
    process.stdin.flush()

    # 从子进程读取输出
    output = process.stdout.read()

    # 关闭管道和子进程
    process.stdin.close()
    process.stdout.close()
    process.wait()

    return output

# 调用函数并传入输入数据
input_data = "Hello, subprocess!"
output = communicate_with_process(input_data)

print(output)

在上述示例中,我们使用了subprocess模块创建了一个子进程,并通过Popen函数指定了输入输出管道。然后,我们通过stdin.write()方法向子进程写入数据,并通过stdout.read()方法从子进程读取输出。最后,我们关闭了管道和子进程,并返回输出结果。

这种方法可以应用于各种场景,例如与其他命令行工具进行交互、调用外部程序等。在腾讯云的云计算服务中,可以使用云服务器(CVM)来运行Python脚本,并通过管道与其他进程进行通信。

腾讯云相关产品推荐:

  • 云服务器(CVM):提供弹性、安全、稳定的云端计算服务。产品介绍
  • 云函数(SCF):无服务器计算服务,可实现按需运行代码。产品介绍
  • 云托管(TCM):提供全托管的容器化部署服务,简化应用程序的构建和管理。产品介绍
  • 云原生应用平台(TKE):基于Kubernetes的容器化应用管理平台,提供高可用、弹性伸缩的容器集群。产品介绍

请注意,以上推荐的产品仅作为参考,具体选择应根据实际需求进行。

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

相关·内容

  • python正向连接后门

    新建一个socket,并将0、1、2分别代表系统stdinstdout、stderr(标准输入、输出、错误)重定向到socket,然后开启一个shell。...客户端连接上以后,就开启一个shell进程,然后把进程标准输入输出错误(stdinstdout、stderr)都重定向到管道,通过管道和python程序连接,pysubprocess库已为我们封装好了这个功能...然后进入一个循环,每次读取一下socket数据,然后写入stdin,通过管道传输给shell,shell执行完后,我用stdout.read()将结果读取到,再send给客户端。     ...pythonread不是异步,只有读取指定字节或读取到EOF才会返回结果。如果没有EOF那么read就一直读,程序阻塞在这里,于是表现出来就是卡死了。我nc输入dir,什么返回都没有。...直接在popen时候,将新建进程stdinstdout、stderr都重定向到socket。这样就可以不使用管道通信了。这也是C语言下零管道后门原理。

    1.4K31

    python 标准类库-并行执行之subprocess-子进程管理

    因为不是从当前进程读取管道(pipe),如果子进程没有生成足够输出来填充OS管道缓冲区,可能会阻塞子进程。...因为不是从当前进程读取管道(pipe),如果子进程没有生成足够输出来填充OS管道缓冲区,可能会阻塞子进程。...因为不是从当前进程读取管道(pipe),如果子进程没有生成足够输出来填充OS管道缓冲区,可能会阻塞子进程。...subprocess.STDOUT 可用于Popen函数stdinstdout或者stderr参数指特定值,表示标准错误信息必须一起写入同样句柄,比如标准输出。...如果进程在timeout(单位 秒)之后依然没终止,则抛出TimeoutExpired 异常,(Python3.3.2发丝。捕获该异常并重试comunicate,不会丢失任何输出。

    4.1K20

    python实现局域网ip地址扫描

    python 遍历局域网ip 从知道python开始,我视线里就没缺少过他。尤其是现如今开发语言大有傻瓜化趋势。而作为这一趋势领导,脚本语言就显得格外亮眼。...subprocess模块只定义了一个类: Popen。可以使用Popen来创建进程,并与进程进行复杂交互。...subprocess.PIPE   在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数。表示与子进程通信标准流。...Popen.communicate(input=None)   与子进程进行交互。向stdin发送数据,或从stdout和stderr读取数据。可选参数input指定发送到子进程参数。...注意:如果希望通过进程stdin向其发送数据,在创建Popen对象时候,参数stdin必须被设置为PIPE。

    3K10

    Python用subprocessPopen来调用系统命令

    可是这两个命令过于简单,不能完毕一些复杂操作,如给执行命令提供输入或者读取命令输出,推断该命令执行状态,管理多个命令并行等等。...參数stdin, stdout, stderr分别表示程序标准输入、输出、错误句柄。他们能够是PIPE,文件描写叙述符或文件对象,也能够设置为None,表示从父进程继承。...subprocess.PIPE 在创建Popen对象时,subprocess.PIPE能够初始化stdin, stdout或stderr參数。表示与子进程通信标准流。...向stdin发送数据,或从stdout和stderr读取数据。可选參数input指定发送到子进程參数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。...在异常对象,包 括进程returncode信息。 subprocess模块内容就这么多。在Python手冊,还介绍了怎样使用 subprocess来替换一些老模块,老函数样例。

    1.8K20

    Python模块之subprocess

    二 基础知识 Python2.4引入subprocess模块来管理子进程,可以像Linux 系统执行shell命令那样fork一个子进程执行外部命令,并且可以连接子进程output/input...Popen.communicate(input=None) 与子进程进行交互。向stdin发送数据,或从stdout和stderr读取数据。可选参数input指定发送到子进程参数。...那么坑爹问题来了:当你要使用Pythonsubprocess.Popen实现命令行之间管道传输,同时数据源又非常大(比如读取上GB文本或者无尽网络流)时,官方文档不建议用wait,同时communicate...是无任何返回输出,使用,child.communicate()或者读取stdout 则会持续等待。...五 参考资料 [1] 官方文档 [2] Pythonsubprocess与Pipe [3] python类库31[进程subprocess]

    1.9K10

    pythonsubprocess模块

    需要说明是,该方法在python3.x才有。 call()方法启动进程,其标准输入输出会绑定到父进程输入和输出。调用程序无法获取命令输出结果。...如通过为stdin, stdout和stderr传递不同参数。 subprocess.Popen(): 在一些复杂场景,我们需要将一个进程执行输出作为另一个进程输入。...=subprocess.PIPE, stdout=subprocess.PIPE) ​ msg = 'Hello world'.encode('utf-8') ​ 写入到输入管道 ​ proc.stdin.write...:发送数据到stdin并从stdout和stderr读数据,直到收到EOF。...()读不出来 ​ 要读出来要先输出到标准输出里,先存到管道PIPE 再给stdout python和shell是两个进程不能独立通信,必须通过操作系统提供管道 ​ 用管道可以把结果存到stdin stdout

    3K20

    WindowsAPI 之 CreatePipe、CreateProcess

    管 道(Pipe)实际是用于进程间通信一段共享内存,创建管道进程称为 管道服务器,连接到一个管道进程为 管道客户机。一个进程在向管道写入数据后,另 一进程就可以从管道另一端将其读取出来。...大多数命令行程序从stdin输入,输出到stdout或 stderr,有时我们需要重定向stdout,stderr,stdin。...重定向stderr和stdout是相同。 同理,要重定向stdin的话,生成一个管道, 管道写入端由主程序写,子进程从管道读出端读数据。...匿名管道主要用于本地父进程和子进程之间通信,在父进程的话,首先是要创建一个匿名管道,在创建匿名管道成功后,可以获取到对这个匿名管道读写句柄,然后父进程就可以向这个匿名管道写入数据和读取数据了,但是如果要实现是父子进程通信的话...(如果是父进程从子进程读取数据,那么由子进程调用GetStdHandle()取得管道写入句柄,并调用WriteFile()将数据写入到管道。

    4K10

    pythonsubprocess

    python2.7 源码注释(由于能力有限,翻译不太准确): 这个模块允许您开启进程、连接输入、输出和错误管道,并获取他们返回代码。...communicate(input=None)     与进程相互作用: 发送数据到标准输入。从标准输出、标准错误读取数据, 直到到达文件尾。等待进程终止。...注意:读取数据是保存在缓冲区,因此,如果数据太大或没有限制则不要使用这个方法 下面的属性也是有效: =====================  stdin     如果stdin参数是PIPE,...=STDOUT, close_fds=True) (child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout) 在 Unix系统,...=True) (child_stdout, child_stdin) = (p.stdout, p.stdin) 在 Unix系统, popen2 也可以在没有shell介入情况下直接传递给程序以序列形式执行命令行

    1.6K30

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

    这个模块可以非常方便启动一个子进程,并且控制其输入和输出 Class Popen(args,bufsize = 0,executable=None, stdin =None,stdout =None...bufsize默认值是0(无缓冲)。 stdinstdout和stderr分别指定执行程序标准输入,标准输出和标准错误文件句柄。...返回returncode Popen.communicate(input=None) 将信息输入到进程,从stdout和stderr读取数据,直到达到文件结尾。等待进程终止。...可选stdin参数应该是要发送到子进程字符串,如果没有数据应发送给子进程,则为None。...返回一个元组(stdout,stderr) 但是读取数据缓存在内存,所以如果数据量很大或者无限,就不要使用这种方法 Popen.pid 返回子进程pid Popen.returncode 读取进程状态码

    5.4K30

    Python,Shell 和 三个标准文件

    False 时候,我们需要把命令按空格使用逗号分隔开来(即 list 数据结构)传给 cmd 参数(目的是让 Python 清楚这条命令所有细节),代码例子就是使用这种;而 True 时候只需要把命令一股脑...communicate() returns a tuple (stdout, stderr). 翻译一下: 与进程进行交互:将数据发送到 stdin。...从 stdout 和 stderr 文件读取数据,直到达到文件结尾。等待进程终止。可选 input 参数应该是要发送到子进程字符串,如果没有数据应该发送给子进程,则为 None。...communicate() 返回一个元组 (stdout, stderr)。 例子我们并没有显式指定 input 参数,默认为 None,我们只从 stdin 和 stderr 文件读取数据。...这里其实是一个同步过程,进程终止后才会返回所读取数据(进程终止,文件自然也结尾了),也就是 communicate() 方法直接使命令执行变为了同步,不执行完成就一直阻塞。

    1.4K60

    Python守护进程daemon实现

    守护进程脱离于终端是为了避免进程在执行过程信息在任何终端上显示并且进程也不会被任何终端所产生终端信息所打断。...用户层守护进程缺少控制终端可能是守护进程调用了setsid结果。大多数用户层守护进程都是进程组长进程以及会话进程,而且是这些进程组和会话唯一进程。 守护进程启动方式有其特殊之处。...8、用日志系统记录出错信息    因为守护进程没有控制终端,当进程出现错误时无法写入到标准输出上,可以通过调用syslog将出错信息写入到指定文件。.../usr/bin/env python # coding:utf-8 import os,sys,time def daemon_init(stdin='/dev/null',stdout='/dev..._exit(1) # 孙进程 # for i in range(3,64): # 关闭所有可能打开不需要文件,UNP这样处理,但是发现在python实现不需要。

    7.4K30
    领券