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

Python subprocess与命令行交互

Python subprocess 模块是一个功能强大的库,用于启动和与子流程交互。 它附带了一些高级 api,比如调用、检查输出和运行,这些都集中在的程序运行和等待完成的子进程上。...将它作为一个子进程启动,然后将客户机连接到它,并运行一些测试序列。 当完成后,希望以一种有序的方式关闭子程序。 这对于同步运行子进程的 api 来说是很难实现的,因此必须查看一些底层级别的 api。...虽然可以使用 subprocess.run在一个线程中启动一个子进程,并在另一个线程中与其交互。 但是,当完成了子进程之后,要完全终止它将变得非常棘手。...使用底层的 Popen API 异步启动进程(意味着 Popen 立即返回,子进程在后台运行)。...注意,也可以在这里使用communicate,而不是等待来捕获 stderr 输出。 使用非阻塞读线程和可阻塞线程进行交互 最后的示例演示了一个稍微更高级的场景。

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

    Supervisor | 笔记

    : supervisortd、supervisorctl、echo_supervisord_conf, 分别是supervisor的 守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令...(程序)编写一个配置文件,放在/etc/supervisor.d/目录下, 以.ini作为扩展名(每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起)。...当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。...= 20MB # stdout日志文件备份数 stdout_logfile_backups = 20 子进程配置示例 program: 是唯一不可重复的,用来唯一标识一个服务 /etc/supervisord.d...这是一个使用这种方法的 Dockerfile 示例,假设预先编写 supervisord.conf 的 my_first_process 、 和 my_second_process 文件都与您的 Dockerfile

    1.1K20

    python 守护进程(daemon)

    守护进程的编写步骤: 1、fork子进程,然后父进程退出,此时子进程会被init进程接管。 2、修改子进程的工作目录,创建新进程组合新会话,修改umask。.../usr/bin/env python # -*- coding:utf-8 -*- import sys, os '''将当前进程fork为一个守护进程    注意:如果你的守护进程是由inetd启动的...os.setsid()  # setsid调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。       ...# 在/tmp/daemon_error.log会记录错误运行日志 # 在/tmp/daemon_stdout.log会记录标准输出日志。...3.创建新会话 使用setsid后,子进程就会成为新会话的首进程,子进程会成为新进程组的组长进程,子进程没有控制终端。

    1.1K30

    Supervisor管理进程

    也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。...config.d 目录下,以.ini作为扩展名(每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起)。...到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发 stderr_logfile:把进程的错误日志输出一个文件中,除非redirect_stderr参数被设置为true stderr_logfile_maxbytes...如果设置为0则表示不限制日志文件大小 stderr_logfile_backups:错误日志轮转备份的数量,默认是10,如果设置为0,则不备份 stderr_capture_maxbytes:当进程处于...:设置进程的umask serverurl:是否允许子进程和内部的HTTP服务通讯,如果设置为AUTO,supervisor会自动的构造一个url 4.运行Supervisor 4.1 启动supervisord

    6.6K1901

    Python,Shell 和 三个标准文件

    标准错误输出文件(stderr) 后两个文件对应终端的屏幕,进程从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。...communicate() returns a tuple (stdout, stderr). 翻译一下: 与进程进行交互:将数据发送到 stdin。...从 stdout 和 stderr 文件中读取数据,直到达到文件结尾。等待进程终止。可选的 input 参数应该是要发送到子进程的字符串,如果没有数据应该发送给子进程,则为 None。...communicate() 返回一个元组 (stdout, stderr)。 例子中我们并没有显式的指定 input 参数,默认为 None,我们只从 stdin 和 stderr 文件中读取数据。...注意这里使用了 iter() 内置函数,将 p.stdout 转换为一个迭代器,并使用 p.stdout.readline 替换迭代器的 next 方法,后面 '' 的意思就是当 p.stdout.readline

    1.4K60

    Supervisor-让你的程序监控管理更得心应手

    优点 简单便捷 通过简单易懂的配置文件配置Supervisor,即可对任务的管理与监控,它提供了重新启动失败的进程和自动日志轮换等功能。 集中 提供了一个开始,停止和监视的地方。...配置Supervisor以提供本地或远程命令行和Web界面。 高效 通过fork / exec启动其子进程,并且子进程不守护。...它负责自行调用启动子程序,响应来自客户端的命令,重新启动崩溃或退出的子进程,记录其子进程stdout和stderr 输出以及生成和处理与子进程生存期中的点相对应的“事件”。...服务器进程使用的配置文件位于/etc/supervisord.conf中,通过适当的文件系统权限确保此文件的安全(它包含未加密的用户名和密码,它可能是我们服务器的root密码) Supervisorctl...从supervisorctl我们可以连接到不同的supervisord进程(一次一个),获取受其控制的子进程的状态,停止和启动子进程,以及获取正在运行的supervisord进程的列表 命令行客户机通过

    1K20

    进程管理工具supervisor教程及告警配置

    2.集中 主进程为您提供一个启动,停止和监控流程的位置。流程可以单独控制,也可以成组控制。您可以将Supervisor配置为提供本地或远程命令行和Web界面。...它负责在自己的调用中启动子程序,响应来自客户端的命令,重新启动崩溃或退出的子进程,记录其子进程stdout和stderr 输出,以及生成和处理与子进程生命周期中的点相对应的“事件”。...从 supervisorctl,用户可以连接到不同的 supervisord进程(一次一个),获取由子进程控制的状态,停止和启动子进程,并获取supervisord的运行进程列表。...= /var/log/supervisord/tornado_server.log loglevel=info 设置日志级别 loglevel 指定了日志的级别,用 Python 的 print 语句输出的日志是不会被记录到日志文件中的...进程的日志输出包含 和 PROCESS_COMMUNICATION_STDOUT 进程的标准输出包含 和 PROCESS_COMMUNICATION_STDERR 进程的标准错误输出包含

    3.7K11

    深入理解NodeJS多进程

    IO流stdin、stdout、stderr;spawn返回一个子进程的引用,通过这个引用可以监听子进程状态,并接收子进程的输入流。...、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。...,而是创建一个socket并发送到父进程,以此将自己注册到父进程,所以只有父进程监听了端口,子进程通过socket和父进程通信,当一个请求到来后,父进程会根据轮询策略选中一个子进程,然后将请求的句柄(其实就是一个...socket)通过进程通信发送给子进程,子进程拿到socket后使用这个socket和客户端通信,响应请求。...答案通过上面的介绍,我们知道了pm2使用cluster做集群管理,cluster又是使用child_process.fork来创建子进程,所以父子进程通信使用的是内置默认的IPC通道。

    1.8K20

    用 Facebook Hydra 参数配置框架来简化程序配置

    减少了复杂应用程序中常见的一些样板代码,例如处理配置文件,配置日志记录和定义命令行标志。 下面我们通过几个简单例子给大家演示下如何使用。...subprocess模块中定义了一个Popen类,通过它可以来创建进程,并与其进行复杂的交互。Popen 是 subprocess的核心,子进程的创建和管理都靠它处理。...stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄 preexec_fn:只在 Unix 平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用...cwd:用于设置子进程的当前目录。 env:用于指定子进程的环境变量。如果 env = None,子进程的环境变量将从父进程中继承。...我们通过subprocess.Popen启动了spark; hydra 的输入 可以转换为 spark 和 python 的输入; 然后读取子进程的stdout; 逐次使用log.info来打印转发的stdout

    1.7K40

    理解NodeJS多进程

    IO流stdin、stdout、stderr;spawn返回一个子进程的引用,通过这个引用可以监听子进程状态,并接收子进程的输入流。...、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。...,而是创建一个socket并发送到父进程,以此将自己注册到父进程,所以只有父进程监听了端口,子进程通过socket和父进程通信,当一个请求到来后,父进程会根据轮询策略选中一个子进程,然后将请求的句柄(其实就是一个...socket)通过进程通信发送给子进程,子进程拿到socket后使用这个socket和客户端通信,响应请求。...答案通过上面的介绍,我们知道了pm2使用cluster做集群管理,cluster又是使用child_process.fork来创建子进程,所以父子进程通信使用的是内置默认的IPC通道。

    1.2K00

    数据库PostrageSQL-服务器配置(错误报告和日志)

    错误报告和日志 19.8.1. 在哪里做日志 log_destination (string) PostgreSQL支持多种方法来记录服务器消息,包括stderr、csvlog和syslog。...当包括有stderr或csvlog时,会创建文件current_logfiles来记录当前正在被日志收集器使用的日志文件的位置以及相关的日志目的地。这提供了一种查找实例当前使用的日志的便利手段。...这种方法比记录到syslog通常更有用,因为某些类型的消息不会在syslog输出中出现(一个常见的例子是动态链接器错误消息;另一个例子是由archive_command等脚本产生的错误消息)。...也可以不使用日志收集器而把日志记录到stderr,日志消息将只会去到服务器的stderr被定向到的位置。不过,那种方法只适合于低日志量,因为它没有提供方法来轮转日志文件。...也可以使用标点符号。 Syslog产生自己的时间戳和进程 ID 信息,因此如果你记录到syslog你可能不希望包括哪些转义。

    1.2K10

    详解supervisor进程管理

    负责启动子程序,应答客户端命令,子程序日志记录,对进程变化发送事件通知等 supervisorctl: 客户端命令行工具,可以连接服务器端,进行进程的启动、关闭、重启、状态查看等。...=/a/path ; 子进程的stdout的日志路径,可以指定路径,AUTO,none等三个选项 设置为none的话,将没有日志产生。...设置为AUTO的话,将随机找一个地方成日志文件,而且当supervisord重新启动的时候,以前的日志文件会被清空。...=false ; 为ture的时候,当子进程由stdout向文件描述符中写日志的时候,将触发supervisord发送PROCESS_LOG_STDOUT类型的event(default false...debug,生产环境日志级别设置为info,修改loglevel字段即可 日志文件大小和个数需要参考服务端所在机器的磁盘大小,会产生stderr和stdout两种日志 pid文件和log文件都不建议存放在

    71731

    Console 模块解读及简单实现

    模块实现 实现步骤 创建 logger.js 文件 Logger 模块基本使用 日志输出至终端 log、info、error、warn、clear 日志输出至文件 trace 打印错误堆栈 dir 显示一个对象的所有属性和方法...= Logger; Logger 模块基本使用 日志输出至终端 无特殊说明,日志都是默认打印到控制台,在一些代码调试中也是用的最多的。...; // 内容输出到 stdout.txt 文件logger.error('错误日志记录'); // 内容输出到 stderr.txt 文件 版本问题 将日志信息打印到本地指定文件,这里要注意版本问题,...当你向一个交互终端会话写时这可能不是个问题,但当生产日志到进程的输出流时要特别留心。...同时另一个疑问开启一个 http server 为什么进程没有退出?参考下文章 Node.js 为什么进程没有 exit?。

    1.2K10

    数据库PostrageSQL-日常重建索引

    如果创建成功并且得到的索引是可用的,则原来的索引可以使用ALTER INDEX和DROP INDEX的命令组合替换成新创建的索引。...在使用这种多步重建方法之前应仔细地检查,因为对于哪些索引可以采用这种方法重索引是有限制的,并且出现的错误必须被处理。...要利用这个工具,我们需要设置postgresql.conf里的log_destination配置参数设置为syslog(记录syslog日志)。...然后在你想强迫syslog守护进程开始写入一个新日志文件的时候, 你就可以发送一个 SIGHUP信号给它。 如果你想自动进行日志轮转,可以配置logrotate程序处理 来自syslog的日志文件。...另一种可能的方法是配置日志轮转程序,让它循环地覆盖旧的日志文件。 pgBadger2是一个外部项目,它可以进行日志文件的深度分析。

    75410

    Java 调用 shell 控制超时时间

    背景平台开发经常需要使用 shell 脚本调度大数据的组件,在使用 springBoot 开发项目时也是如此,为了保证子 shell 的执行时间可控,需要设置超时时间,如果 shell 无法在给定时间内返回...process.isAlive() + process.exitValue()); System.out.println(stringBuilder.toString()); }}子进程正常结束日志如图所示....main(Main3.java:37)代码优化当检测到子进程超时依然没有结束时,我们会主动 destroy 掉子进程,destory 子进程的同时也会将 InputStream 流关闭,导致子进程计算结果无法获取...void destroy()底层使用的一个 JNI(java native interface)方法,可能是异步执行的,并不会同步 kill 掉进程返回,因此需要等待一小段时间,等待子进程被终结...底层使用 exitValue,不会抛异常InputStreamclose 方法不用的 InputStream 有不同的 close 实现,对于 process.getInputStream() 返回的类是

    2.3K20

    绕过SSH服务器的端口转发限制

    因此,可以编写一个程序,它会在初始化时与指定的服务器端口建立Socket连接,然后将所有stdin读到的数据实时发送给Socket,并将Socket接收到的数据写到stdout中,stderr则用于输出控制信息和日志等...turbo-tunnel中可以使用以下方法将流量转发给SSH服务器: turbo-tunnel -l http://:8080/ -t ssh+process://root:password@1.1.1.1...0x03 总结 利用进程的实时输入输出,可以解决SSH服务器不支持端口转发的问题,从而绕过服务器限制,建立通信通道。...这种方式应用场景更广,也更加隐蔽,只是使用上需要提前将一个文件拷贝到SSH服务器上,这里可能少数场景会有些阻碍(例如删除了chmod命令),需要寻找绕过这些限制的方法。...不过总的来说,使用这种方法,大大提升了建立SSH隧道的成功率,具有较大的实际应用价值。

    44320
    领券