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

《理解 Unix 进程》笔记-1

STDIN 提供了一种从键盘或管道中读取输入的通用方法 STDOUT 和 STDERR 提供了一种向显示器、文件或打印机等输出写入内容的通用方法。...as e: print('error', e) # 这里将打印 exit 中的参数 2 sys.exit() 会引发一个异常,如果异常没有被捕获,那么 python 解释器将会退出。...进行衍生时,调用 fork 的进程被称为父进程,新创建的进程被称为子进程。 子进程从父进程处继承了其所占用内存中的所有内容,以及所有属于父进程的已打开的文件描述符。...孤儿进程 当通过终端启动单个进程时,通常只有这个进程向 STDOUT 写入,从键盘获取输入或者侦听 Ctrl+C 已待退出。...执行代码,打印结果如下: ? 通过打印结果会发现,运行程序父进程结束后,立刻放回到终端命令提示符下,此时终端被子进程输出到 STDOUT 的内容重写了。

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

    Python subprocess与命令行交互

    最新源代码: https://github.com/python/cpython/tree/3.8/Lib/subprocess.py 下面谈论不直接涉及一个长时间运行的子进程。...请注意在调用时传递给 Python 的 -u: 这对于避免标准输出缓冲并在进程被终止时尽可能多地查看标准输出非常关键。 在与子进程交互时,缓冲是一个严重的问题,稍后将看到更多这方面的示例。...线程会轮询子标准输出属性,只要有新行可用,就会循环并立即打印它们。 如果运行这个示例,您将注意到子进程的 stdout 是实时报告的,而不是在最后报告一个错误。...只有当关闭 proc.stdout 时才会发生这种情况,这种情况发生在子节点退出时。 因此,尽管看起来读线程可能永远不会终止——但它总会终止!...如果不想仅仅打印捕获的 stdout,而是要对其进行处理(比如寻找预期的模式) ,那么可以使用 Python 的线程安全队列进行组织。

    7.7K22

    Python调用外部系统命令

    subporcess模块可以调用外部系统命令来创建新子进程,同时可以连接到子进程的nput/output/error管道上,并得到子进程的返回值。...stdin、stdout、stdout 分别表示标准输入、标准输出和标准错误。其值可以为PIPE、文件描述符和None等。默认值为None,表示从父进程继承。...preexec_fn 只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用cwd设置子进程当前目录env env是字典类型,用于指定子进程的环境变量...默认值为None,表示子进程的环境变量将从父进程中继承。Universal_newlines 不同操作系统下,文本的换行符是不一样的。...如果失败,抛CalledProcessError.异常。

    27320

    Python模块之subprocess

    二 基础知识 Python2.4引入subprocess模块来管理子进程,可以像Linux 系统中执行shell命令那样fork一个子进程执行外部的命令,并且可以连接子进程的output/input...HelloWorld check_int.py enumerate.py flasky hello.py >>> out=subprocess.check_output(["ls","-I"])#执行命令出现异常直接打印出异常信息...2) 如何处理函数返回的信息(命令执行的结果或者错误信息) 3) 当子进程执行的失败也即returncode不为0时,父进程如何处理后续流程?...即当stdout/stdin设置为PIPE时,使用wait()可能会导致死锁。...那么坑爹的问题来了:当你要使用Python的subprocess.Popen实现命令行之间的管道传输,同时数据源又非常大(比如读取上GB的文本或者无尽的网络流)时,官方文档不建议用wait,同时communicate

    2K10

    自带的 print 函数居然会报错?

    前言 最近用 Python 写了几个简单的脚本来处理一些数据,因为只是简单功能所以我就直接使用 print 来打印日志。...直到这个问题反复出现我才认真看了这个异常,定睛一看 print 不也是 IO 操作嘛,难道真的是自带的 print 函数都出问题了?...比如这次提到的 Python 中的 os.popen() 就是创建了一个子进程,既然是子进程那肯定是需要和父进程进行通信才能达到协同工作的目的。...这里的 0 1 2 分别对应一个进程的stdin(标准输入)/stdout(标准输出)/stderr(标准错误)。...父子进程是通过匿名管道进行通信的,当读取端关闭时,写入端输出到达管道最大缓存时会收到 SIGPIPE 信号,从而抛出 Broken pipe 异常。 子进程会继承父进程的文件描述符。

    70310

    【Linux探索学习】第二十二弹——用户缓冲区:深入解析操作系统中数据交互时的缓冲区机制

    return 0; } 运行结果: 我们发现再次输出重定向时结果发生了很大的改变,调用C语言接口的语句被打印了两遍,而系统调用接口则只被打印一遍,而且顺序也发生了变化...,直到碰到\n c.全缓冲 --- 缓冲区满了,才刷新 除此之外当进程结束时也会进行刷新 一般向显示器打印时是行缓冲,向文件中打印时是全缓冲 2.2 问题解决 下面我们继续解决一下最一开始提出的问题...,为什么fork()之后再向文件中打印出现那种情况 向文件中输出时实际上我们的缓冲方案是发生改变了,由往显示器上显示时的行刷新变为了全刷新,只有在缓冲区被写满或进程要结束时时我们的内容才会被刷新到内核中...,而write是系统接口,它所打印的内容是直接被写在内核中的,所以先被打印了出去,而我们缓冲区的内容需要等待进程终止时被强制刷新,而我们的fork()创建了新的子进程,子进程会复制父进程的缓冲区,子进程在结束时也会将缓冲区中的内容进行刷新...Linux 提供了 aio(Asynchronous I/O)接口,允许程序在进行 I/O 操作时不阻塞主线程。 六、 总结 用户缓冲区是 Linux 系统中处理 I/O 操作的重要机制。

    8110

    python反向shell

    =subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE); #wait函数用于回收进程,不然父进程比子进程先停止的话子进程就会没人回收...,变成僵尸进程一直占用资源,会返回一个comm.returncode属性,returncode会返回子进程的状态,如果为空则表示没结束,=0则表示正常推出,大于0表示异常退出,小于0表示被信号杀掉了,取得返回值...,来判断是出现什么情况 a = comm.wait(); #communicate函数会和子进程交流,其格式communicate(input=None)...,会将参数input(字符串)中的数据发送给子进程的stdin,同时从子进程的stdout和stderr读取数据,直到EOF,返回值是一个元组,有两个元素,分别表示标准输出,和错误输出中读取的数据...也就是python先启一个shell,然后执行data comm = subprocess.Popen(data,shell=True,stdout=subprocess.PIPE

    70390

    python与s

    运行参数中指定的命令,但是不阻塞父进程 f.read()# 执行读取操作时,将阻塞父进程 #使用写管道 #需要提前写好echo文件 ''' #echo.py while True: in = input...(如果命令返回码为0,返回运行结果;否则,直接抛出CalledProcessError异常) 不阻塞父进程 不支持stdout的管道 指定参数:stderr = STDOUT 可捕获错误信息 支持参数:...input getoutput(cmd) 功能: 获取子进程中执行命令的输出结果 返回值:执行命令的结果 不阻塞父进程 不支持管道 命令执行错误时,不引发异常 getstatusoutput(cmd...) 功能:获取子进程中执行命令的返回码和结果 返回值:(retcode, stdout)元组 不阻塞父进程 不支持管道 命令执行错误时,不引发异常 run(args, *, stdin = None...不阻塞父进程 支持双向管道 参数check为True时,可能会引发异常 run函数是对Popen类封装后形成的简单函数

    93010

    python subprocess模块

    =subprocess.PIPE) a.stdout.read() subprocess.check_call 执行命令,如果执行状态码是 0 ,则返回0,否则抛异常...,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用 close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入...所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。...shell:同上 cwd:用于设置子进程的当前目录 env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。...,如:主窗口的外观,进程的优先级等等 终端输入的命令分为两种: 输入即可得到输出:如 ifocnfig 输入进行某环境,依赖某环境再输入:如 python 需要交互的命令示例:

    1K20

    【Python | 常见场景】最佳实践系列 —— 各种场景及运用(适合下饭刷)

    希望大佬带带) 该文章收录专栏 [✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨] @toc subprocess 模块 subprocess模块是Python标准库中用于创建和管理子进程的模块...与子进程交互: ``subprocess模块还允许您与子进程进行交互,发送输入并获取输出。您可以使用subprocess.Popen`类来创建子进程对象,并使用它的方法进行交互。...\n") process.stdin.close() output = process.stdout.read() print(output) ``` 上述代码创建一个Python子进程,向其发送一段代码...错误处理: ``subprocess模块还提供了处理子进程中的错误和异常的功能。您可以通过检查subprocess.CompletedProcess`对象的属性来获取命令的执行结果、返回码和输出。...,并打印出命令执行失败的信息。

    20810

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

    我们不能将close_fds设置为True同一时候重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。 假设參数shell设为true,程序将通过shell来运行。...subprocess.PIPE 在创建Popen对象时,subprocess.PIPE能够初始化stdin, stdout或stderr參数。表示与子进程通信的标准流。...subprocess.STDOUT 创建Popen对象时,用于初始化stderr參数,表示将错误通过标准输出流输出。 Popen的方法: Popen.poll() 用于检查子进程是否已经结束。...Popen.stdout 假设在创建Popen对象是,參数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。...在异常对象中,包 括进程的returncode信息。 subprocess模块的内容就这么多。在Python手冊中,还介绍了怎样使用 subprocess来替换一些老的模块,老的函数的样例。

    1.9K20

    python之调用系统命令 原

    我们不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。...subprocess.PIPE 在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数,表示与子进程通信的标准流。...Popen.communicate(input=None) 与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。...Popen.stdout 如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。...Popen.stderr 如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

    2.3K40

    python中执行shell命令的几个方

    最近有个需求就是页面上执行shell命令,第一想到的就是os.system, 代码如下: os.system('cat /proc/cpuinfo') 但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了...用于指定一个可执行对象(callable object),它将在子进程运行之前被调用 close_sfs 在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入...所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。...shell 同上 cwd 用于设置子进程的当前目录 env 用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。...universal_newlines 不同系统的换行符不同,True -> 同意使用 \n startupinfo 只在windows下有效,将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性

    3K10
    领券