首页
学习
活动
专区
圈层
工具
发布

Python,Shell 和 三个标准文件

标准错误输出文件(stderr) 后两个文件对应终端的屏幕,进程从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。...communicate() returns a tuple (stdout, stderr). 翻译一下: 与进程进行交互:将数据发送到 stdin。...从 stdout 和 stderr 文件中读取数据,直到达到文件结尾。等待进程终止。可选的 input 参数应该是要发送到子进程的字符串,如果没有数据应该发送给子进程,则为 None。...这里其实是一个同步的过程,进程终止后才会返回所读取到的数据(进程终止,文件自然也结尾了),也就是 communicate() 方法直接使命令执行变为了同步,不执行完成就一直阻塞。...注意这里使用了 iter() 内置函数,将 p.stdout 转换为一个迭代器,并使用 p.stdout.readline 替换迭代器的 next 方法,后面 '' 的意思就是当 p.stdout.readline

1.6K60

在Go程序中实现服务器重启的方法

,但要保持已有的连接。...启用新版本的进程 将socket“交给”新进程,新进程开始接受新连接请求 旧进程处理完毕后立即停止。...这样进程仍在监听服务器端口,但连接请求会被操作系统的网络栈排队,等待一个进程接受它们。...发送socket到子进程并恢复它 正如你先前看到的,你可以将文件描述符传递到新进程,这需要一些UNIX魔法(一切都是文件),我们可以把socket发送到新进程中,这样新进程就能够使用它并接收及等待新的连接...使用确实是一种无干扰更新进程的有效方式,在最大时间上,新的连接会等待几毫秒——用于服务的启动和恢复socket,但这个时间很短。

1.9K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux】从零开始手搓 Shell (超详解)

    所以要写一个shell,需要循环以下过程: 获取命令行 解析命令行 建立一个子进程(fork) 替换子进程(execvp) 父进程等待子进程退出(wait) 在继续学习新知识前,我们来思考函数和进程之间的相似性...而是被发送到 stdout。...stdout 就像一个缓冲区,默认情况下,发送到 stdout 的输出然后再发送到屏幕(我们可以根据需要将其重定向到其他文件/流) 同样,stdin 默认映射到键盘,但可以重定向到任何其他文件/流。...现在,默认情况下,stdout 是 行缓冲 的。 这意味着,发送到 stdout 的输出不会被立即发送到屏幕以供显示(或重定向文件/流),直到它在其中获得换行符。...但要详细且专业的说的话,fgets()函数的作用可以这么解释:从第三个参数指定的流中读取最多第二个参数大小的字符到第一个参数指定的容器地址中。

    48710

    Python subprocess与命令行交互

    Python subprocess 模块是一个功能强大的库,用于启动和与子流程交互。 它附带了一些高级 api,比如调用、检查输出和运行,这些都集中在的程序运行和等待完成的子进程上。...可以用 run 来完成调用子进程的方式,但是对于 底层的进程创建与管理, Popen提供了很大的灵活性,以及处理未被常见函数覆盖的场景。...将它作为一个子进程启动,然后将客户机连接到它,并运行一些测试序列。 当完成后,希望以一种有序的方式关闭子程序。 这对于同步运行子进程的 api 来说是很难实现的,因此必须查看一些底层级别的 api。...获得所有输出时完成 第一个最简单的用例是启动一个 HTTP 服务器,与它交互,干净利落地终止它,并在完成后获取所有服务器的 stdout 和 stderr。...,但由于某些原因(缺少换行、缓冲等) ,它无法获得完整的输入 然后调用 readline 等待回复,因为子进程仍然在等待输入完成(步骤1) ,所以的步骤2可能会永远挂起。

    8.1K22

    Python模块之subprocess用法实例详解

    subprocess用来替换多个旧模块和函数: os.system os.spawn* os.popen* popen2.* commands.* 运行python的时候,我们都是在创建并运行一个进程,...另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。...二、旧有模块的使用 1.os.system() 执行操作系统的命令,将结果输出到屏幕,只返回命令执行状态(0:成功,非 0 : 失败) import os >>> a = os.system("df -...>>> res.stdout.read() b'' #标准错误中有错误信息 >>> res.stderr.read() b'/bin/sh: lm: command not found\n' 注意:上面的提到的标准输出都为啥都需要等于...()) None >>> print(res.poll()) None >>> print(res.poll()) 0 5、wait() 等待命令执行完成,并且返回结果状态 >>> obj = subprocess.Popen

    27K32

    subprocess 使用总结

    linux下,默认是 /bin/bash universal_newlines参数,如果把 universal_newlines 设置成True,则子进程的 stdout 和 stderr 被视为文本对象...subprocess.PIPE 表示一个可以被用于Popen的stdin 、stdout 和stderr 3个参数的特输值,表示需要创建一个新的管道。...2.Popen的方法: Popen.poll(), 用于检查子进程是否已经结束。设置并返回returncode属性。 Popen.wait(), 等待子进程结束。设置并返回returncode属性。...三个数据流默认是表现在用户终端上的执行一个shell命令行时通常会自动打开三个标准文件: 标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件stderr),这两个文件都对应终端的屏幕...进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

    2.1K30

    Python用subprocess的Popen来调用系统命令

    可是这两个命令过于简单,不能完毕一些复杂的操作,如给执行的命令提供输入或者读取命令的输出,推断该命令的执行状态,管理多个命令的并行等等。...向stdin发送数据,或从stdout和stderr中读取数据。可选參数input指定发送到子进程的參数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。...相同,如 果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。 Popen.send_signal(signal) 向子进程发送信号。...Popen.stdout 假设在创建Popen对象是,參数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。...该函数将一直等待到子进程执行结束,并返回进程的returncode。文章一開始的样例就演示了call函数。假设子进程不须要进行交 互,就能够使用该函数来创建。

    2.5K20

    python实现局域网ip地址扫描

    不管是python还是ruby,perl,都火的不得了。就连java都出了个脚本语言版本,好像是叫Groovy,号称下一代的java。 也难怪,硬件发展使得很多场合的处理性能过剩。...subprocess.STDOUT   创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出流输出。...Popen的方法: Popen.poll()   用于检查子进程是否已经结束。设置并返回returncode属性。 Popen.wait()   等待子进程结束。...Popen.communicate(input=None)   与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。...同样,如果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。 Popen.send_signal(signal)   向子进程发送信号。

    3.4K10

    进程间通信—管道,共享内存,消息队列,信号量

    cat和grep也都是进程,那么这行指令就是cat进程把内容通过内存里的一块空间,发送给grep进程,grep筛选出与123456有关的代码打印到屏幕上。...解决方法: 定义POSIX标准, linux和windows实现基于POSIX标准,提供同样的接口,例如定义创建进程的接口为posix_fork(示例名/非真实名字), 且linux和windows都把各自创建进程的调用封装成...进程间通信的本质就是让进程都看到同一份资源,其次才考虑怎么去通信进程间怎么通信根据上面的结论,不难知道,可以通过父进程创建子进程,让父进程和子进程通过相同的文件描述符表上的虚拟地址找到相同的管道文件进而完成通信...,命令行是一个进程,cat将数据读出也是一个进程,数据在一个进程流通到另一个进程,命名管道也完成了进程间通信!...且另一个进程也这样,那么这两个进程都能同时访问到这块内存空间,进而完成进程间通信。未来进程不需要通信,将取消和共享内存的映射关系,再将共享内存释放。

    2.3K00

    【黄啊码】连CGI都不懂,还敢说自己精通PHP吗?

    ,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。...3.当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。 Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。...4.FastCGI 子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。 当FastCGI子进程关闭连接时, 请求便告处理完成。...FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。...master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置), 每个进程内部都嵌入了一个 PHP 解释器,是 PHP

    39710

    【进程间通信】IPC、管道pipe、命名管道FIFO

    创建出来的管道实际上是内核的一块缓冲区,我们可以像读写文件一样来操作这个缓冲区,所以也可以把他理解为一个伪文件。 ② 父进程调用fork()创建子进程,子进程将共享这两个指向管道读写端的文件描述符。.../*首先把ps命令的执行结果重定向到管道的写端(默认将执行结果输出到stdout)*/ dup2(fd[1], STDOUT_FILENO); /*拉起ps进程*/...实际上,这是管道的特性引起的,我们知道,pipe()创建管道后会在内核分配一个缓冲区,并返回两个文件描述符,父进程和子进程都持有读写这两个文件描述符。.../*关闭读端文件描述符,保证数据单向流通*/ close(fd[0]); /*首先把ps命令的执行结果重定向到管道的写端(默认将执行结果输出到stdout)*/...我们可以在open函数的前后分别打印一句话来测试,只有读端写端都open了FIFO,第二个printf()语句才能打印。

    55510

    python中执行DOS命令的3种方法小

    使用Popen模块产生新的process 现在大部分人都喜欢使用Popen。Popen方法不会打印出cmd在linux上执行的信息。的确,Popen非常强大,支持多种参数和模式。...Popen.wait()  等待子进程结束。设置并返回returncode属性。 Popen.communicate(input=None) 与子进程进行交互。...向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。...同样,如 果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。 Popen.send_signal(signal)  向子进程发送信号。...Popen.stdout  如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

    2.5K20

    深入剖析 Web 服务器与 PHP 应用的通信机制 - 掌握 CGI 和 FastCGI 协议的运行原理

    然而,它有一个严重缺陷,对于每个请求都需要重新 fork 出一个 CGI 进程,处理完成后立即关闭。...FastCGI 协议运行原理 FastCGI 进程管理器启动时会创建一个 主(Master) 进程和多个 CGI 解释器进程(Worker 进程),然后等待 Web 服务器的连接。...CGI 解释器进程完成处理后将标准输出和错误信息从同一连接返回给 Web 服务器。 CGI 解释器进程等待下一个 HTTP 请求的到来。...对每个接收到的 HTTP 请求,都需要重启一个 CGI 进程来进行处理,处理完成后必须关闭 CGI 进程,才能达到通知 Web 服务器本次 HTTP 请求处理完成的目的。...如果接收请求,FastCGI 进程会等待接收所有的 PARAMS 和 标准输入数据包。 然后,在处理请求并将返回结果写入 标准输出(STDOUT) 流。

    1.3K21

    Linux 下的进程间通信:使用管道和消息队列

    出现在屏幕中,然后过了 5 秒后,命令行返回,暗示 sleep 和 echo 进程都已经结束了。这期间发生了什么呢?...(即便写入方过早终止了,一个流已终止的标志还是会发给读取方。)无名管道将保持到写入方和读取方都停止的那个时刻。...与此同时,echo 进程立即向标准输出(屏幕)写入问候语,因为这个进程并不从通道中读入任何字节,所以它并没有等待。...当父进程结束了等待,父进程将会调用常规的 exit 函数去退出。对应的,子进程将会调用 _exit 变种来退出,这类变种将快速跟踪终止相关的通知。...mqueue 示例包含两个程序,sender 将向消息队列中写入数据,而 receiver 将从这个队列中读取数据。这两个程序都包含的头文件 queue.h 如下所示: 示例 4.

    1.4K20

    Python 执行系统命令

    好处在于:运用对线程的控制和监控,将返回的结果赋于一变量,便于程序的处理。 subprocess.Popen() 使用Popen可以创建进程,并与进程进行复杂的交互。...3、Popen.communicate(input=None):与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。...同样,如果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。 4、Popen.send_signal(signal):向子进程发送信号。...该函数将一直等待到子进程运行结束,并返回进程的returncode。文章一开始的例子就演示了call函数。如果子进程不需要进行交互,就可以使用该函数来创建。..., 执行指定的命令, 等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。

    2.2K10
    领券