首页
学习
活动
专区
工具
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.2K20

    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

    【Linux基础IO】深入Linux文件描述符与重定向:解锁高效IO操作秘密

    通过文件描述符,进程可以访问和操作对应文件或资源,而无需记住复杂文件名或路径 重定向,则是Linux shell提供一种强大功能,它允许用户改变标准输入(stdin)、标准输出(stdout...如果文件存在,则写入数据会被添加到文件末尾,文件指针会停留在文件末尾,但允许读取;如果文件不存在,则创建新文件。 2....在C语言中,文件I/O操作是一个重要组成部分,它允许程序读取写入文件,以及进行其他形式数据交换 open 在Linux系统编程,open 是一个非常重要系统调用(system call)...文件描述符在操作系统扮演着重要角色,它是进程和文件、套接字等资源之间抽象句柄,通过它可以进行读取写入、映射或控制等操作 打印文件描述符: #include #include...重定向 在Linux,重定向是一种将命令标准输入(stdin)、标准输出(stdout)或标准错误(stderr)重新指向文件或其他命令技术。

    16310

    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]

    2K10

    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

    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

    WindowsAPI 之 CreatePipe、CreateProcess

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

    4.1K10

    使用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.5K30

    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
    领券