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

python执行系统命令的方法

做为系统工程师来说,经常会用到python脚本去调用一下系统命令,现把经常使用的集中调用方法总结如下: 一,os.system(command) 在一个子shell运行command命令,并返回...他可以与新建进程的输入/输出/错误管道联通,并可以获得新建进程执行的返回状态等。使用subprocess模块主要目的就是来替代之前的os,popen,commands等函数或模块。...() ['hsperfdata_root\n', 'supervisor.sock\n', 'tmp_fifo\n'] 创建2个子进程,通过管道把他们连接起来。...一个进程的输出作为另一个进程的输入 >>> f = subprocess.Popen('ls -l',shell=True,stdout=subprocess.PIPE) >>> p = subprocess.Popen...第一种: getoutput(cmd) 在shell执行cmd,返回包含命令标准输出和标准错误流的字符串。

3.8K20

进程间通信和线程间通信的区别_有些线程包含多个进程

命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 4. 消息队列MessageQueue:消息队列是由消息的链表,存放在内核并由消息队列标识符标识。...一旦建立,任何进程都可以通过文件名将其打开和进行读写,而不局限于父子进程,当然前提是进程对FIFO有适当的访问权。当不再被进程使用时,FIFO在内存释放,但磁盘节点仍然存在。...例子:用命名管道实现聊天程序,一个张三端,一个李四端。两个程序都建立两个命名管道fifo1,fifo2,张三写fifo1,李四读fifo1;李四写fifo2,张三读fifo2。...(粉红色部分为select部分,黄色部分为命名管道部分) 在linux系统,除了用pipe系统调用建立管道外,还可以使用C函数库管道函数popen函数来建立管道使用pclose关闭管道。...使用popen函数读写管道,实际上也是调用pipe函数调用建立一个管道,再调用fork函数建立子进程,接着会建立一个shell 环境,并在这个shell环境执行参数所指定的进程。

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

Python调用linux系统命令--使

python 调用系统命令,如果使用subprocess.Popen() 模块,按照命令参数的的形式,可以分两种: 把命令当作字符串传给subprocess.Popen()  把命令保存到一个元组,...也可以使用executable 显式地指定可执行文件的路径。 stdin, stdout, stderr :用于和外部进行通信。可以使用 subprcess.PIPE 进行初始化。...: p = subprocess.Popen() 创建了子进程p 执行命令,外部需要给命令传入参数,则可以用p.communicate(stdin_some)方法,将stdin_some 传入p.stdin...多条命令连通:      在linux 下,经常使用管道将多条命令连在一起,前一条指令的执行结果作为后一条指令的输入,使用Popen 也可以实现。 ? 首先,查看test.txt 文件的内容。...然后,子进程pb 的标准输入stdin 用pa.stdout 进行初始化,实现了管道的功能,pa 进程的输出编程了pb进程的输入,最后的输出结果。

5K20

python的subprocess模块

说明: 在Python 3.5之后的版本,官方文档中提倡通过subprocess.run()函数替代其他函数来使用 ​ ​subproccess模块的功能; ​ 在Python 3.5之前的版本,我们可以通过...如果我们需要访问某些shell的特性,管道、文件名通配符、环境变量扩展功能,这将是非常有用的。...直接使用Popen会对如何运行命令以及如何处理其输入输出有更多控制。通过为stdin, stdout和stderr传递不同的参数。...subprocess.Popen(): 在一些复杂场景,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景,我们需要先进入到某个输入环境,然后再执行一系列的指令等。...才出现subprocess.run 终端输入的命令分为两种: 输入即可得到输出,:ifconfig 输入进行某环境,依赖再输入,Python 常用subprocess 没有管道 retcode

3K20

Linux进程间通信

那么,我们是否可以将这张纸放入内存以提高读写速度呢? 在Linux文本流,我们已经讲解了如何在shell中使用管道连接多个进程。...同样,许多编程语言中,也有一些命令用以实现类似的机制,比如在Python子进程中使用Popen和PIPE,在C语言中也有popen库函数来实现管道 (shell管道就是根据此编写的)。...FIFO又叫做命名管道(named PIPE)。 FIFO (First in, First out)为一种特殊的文件类型,它在文件系统中有对应的路径。...FIFO只是借用了文件系统(file system, 参考Linux文件管理背景知识)来为管道命名。写模式的进程向FIFO文件写入,而读模式的进程从FIFO文件读出。...一个共同的特征是它们并不使用文件操作的API。对于任何一种IPC来说,你都可以建立多个连接,并使用键值(key)作为识别的方式。

3.8K101

Python 执行系统命令

系统命令 作为胶水语言,Python可以很方便的执行系统命令,Python3常用的执行操作系统命令有以下方式 os.system() os.popen() subprocess 模块 os.system...在一些复杂场景,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景,我们需要先进入到某个输入环境,然后再执行一系列的指令等。...3、Popen.communicate(input=None):与子进程进行交互。向stdin发送数据,或从stdout和stderr读取数据。可选参数input指定发送到子进程的参数。...ipconfig', # cmd特定的查询空间的命令 stdin=None, # 标准输入 键盘 stdout=PIPE, # -1 标准输出(演示器、终端) 保存到管道以便进行操作...()) # 其他subprocess.call()、subprocess.check_call()、subprocess.check_output()都是旧方法了,Python3.5+都建议用run(

1.6K10

Python与DBA

与文件系统交互 Python 用来与操作系统交互的核心库是 os 模块,您可以通过此模块处理系统进程、识别平台、处理操作系统管道以及使用环境变量 — 以 100 多个函数和变量的形式。..., mode,buffersize) 对给定 command 打开一个未命名管道,有效地实现与进程的进一步交互;mode 表示管道打开处理属性(默认为“r”,表示读取) os.spawn*(mode, ...清单 2 显示了 ps.py 程序的代码,此程序执行 ps aux 命令并将结果移到 Python 字典。这里使用了一个管道作为 stdout 的目标以捕获所有信息,并阻止输出到屏幕。... 函数接受多个关键字参数, stdin/stdout/stderr 描述符、用于设置进程工作目录的 cwd,或者设置子进程环境变量的 env。...最后,要与生成的子进程完全交互,我们使用 communicate() 函数发送 stdin 输入。

1.1K10

pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)

有时候我们需要在程序里执行一些cmd命令,使用os或者其它模块popen方法去执行 这个问题一般是程序内有输入导致的,这个输入可以是input(),也可以是其它的一些stdin操作(os.popen...经过研究,上结论: os.popen 会打开一个管道执行命令,而管道是有输入(stdin)、输出(stdout) 的!...重点就在输入(stdin)这里: 当我们使用pyinstaller的-w 参数(或Console=False)打包exe时,python解释器是不带控制台的, 所以它没有办法处理输入(stdin) !...现在回到我们将要解决的问题 已知: 用pyinstaller的-w参数打包导致python无法处理输入值(stdin) os.popen 打开的管道却需要处理输入值(stdin) 所以,我们不使用os.popen...这个简单的封装,改成使用subprocess.popen,接着将subprocess.popen打开管道的输入值(stdin)重定向,即可解决问题!

3.5K30

PHP进程通信之管道与消息队列(二十三节)

先说下这个叫做posix_mkfifo()的函数,FIFO有些地方叫命名管道,本质上TA是一个文件,你可以用var_dump()来检验一下,FIFO是支持双向通信的: <?...echo "{$pid} child after fopen FIFO".PHP_EOL; } else if( $pid > 0 ) { // 在父进程,打开命名管道,然后读取文本...打开命名管道,并写入一段文本 echo "{$pid} child before fopen FIFO".PHP_EOL; $file = fopen( $pipe_file, "r"...); echo "{$pid} child after fopen FIFO".PHP_EOL; } else if( $pid > 0 ) { // 在父进程,打开命名管道,然后读取文本...():手工显示创建一个全双工管道,操作上可以细腻,使用上需要注意「锁」的问题 popen():隐式创建半双工管道,代码使用上比较简单 proc_open():隐式创建全双工管道,还有众多的控制细节 --

1.4K31

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

因为不是从当前进程读取管道(pipe),如果子进程没有生成足够的输出来填充OS的管道缓冲区,可能会阻塞子进程。...因为不是从当前进程读取管道(pipe),如果子进程没有生成足够的输出来填充OS的管道缓冲区,可能会阻塞子进程。...bufsize 当创建stdin/stdout/stderr管道文件对象时,bufsize将作为io.open()函数的对应的参数: 0 - 意味着未缓冲 (means unbuffered (read...函数返回一个元组(stdoutdata, stderrdata) 注意,如果想发送数据到进程管道,必须在创建Popen对象时使用stdin=PIPE,类似的如果想从结果元组获取非None值数据,创建...可用call、Popen替换一些老函数os.system(),os.spawn家族系列,shell管道等,具体参考官方文档

3.8K20

python的subprocess

python2.7 源码的注释(由于能力有限,翻译的不太准确): 这个模块允许您开启进程、连接输入、输出和错误的管道,并获取他们的返回代码。...这个模块计划替代一些旧代码,: os.system、os.spawn*、os.Popenpopen2.* 、commands.* 关于subprocess模块可以用来取代这些模块和功能在下面可以找到...程序通常执行序列或字符串的第一项,但可以通过使用明确的参数进行设置。 在UNIX上,shell = False(默认):在这种情况下,Popen使用os.execvp()来执行程序的子进程。...在python程序中都是看作为\n 注意: 这种功能仅仅支持用通用换行符构建的python(默认)。同时文件对象标准输出、标准输入、标准错误的换行符属性,不会被communicate()模块所更新。...注意:读取的数据是保存在缓冲区,因此,如果数据太大或没有限制则不要使用这个方法 下面的属性也是有效的: =====================  stdin     如果stdin参数是PIPE,

1.6K30

Python模块之subprocess

一 简介 在使用Python 开发MySQL自动化相关的运维工具的时候,遇到一些有意思的问题,本文介绍Python的 subprocess 模块以及如何和MySQL交互具体操作,启动 ,关闭 ,备份数据库...如果 args是一个序列,则第一个元素就是命令字符串,而其它的元素都作为参数使用。...Popen.communicate(input=None) 与子进程进行交互。向stdin发送数据,或从stdout和stderr读取数据。可选参数input指定发送到子进程的参数。...那么坑爹的问题来了:当你要使用Python的subprocess.Popen实现命令行之间的管道传输,同时数据源又非常大(比如读取上GB的文本或者无尽的网络流)时,官方文档不建议用wait,同时communicate...五 参考资料 [1] 官方文档 [2] Python的subprocess与Pipe [3] python类库31[进程subprocess]

1.9K10

linux进程间通信方式有哪些_高级进程通信方式

使用popen函数和pclose函数结合来执行系统命令,就用到了管道,它们声明如下: FILE *popen(const char *command,const char *type); int pclose...} return 0; } 在程序,我们创建了一个管道,父进程关闭了写通道,子进程关闭读通道;子进程向管道内写入字符串,而父进程从管道读取字符串并输出。...运行结果: read 18 bytes from pipe :www.yanbinghu.com FIFO FIFO也被称为命名管道,与管道不同的是,不相关的进程也能够进行数据交换。...消息队列 消息队列可以认为是一个消息链表,存储在内核,进程可以从中读写数据。与管道FIFO不同,进程可以在没有另外一个进程等待读的情况下进行写。...总结 本文简单介绍了进程间通信的常见方式,其中对管道命名管道我们使用了一个例子来简单说明,因为我们可能会经常见到它。

2.5K20

Linux内核编程--管道pipe

管道的定义: 管道是一种进程间通信机制,也是Linux操作系统的一种文件形式。一个进程写入管道的数据可以被另一个进程读取。数据按先进先出顺序处理。Linux有两种形式的管道文件,管道FIFO。...管道提供一个单向的数据流【半双工管道】, 示意图: 管道FIFO的异同: 管道没有名字,只能由“亲缘关系”的进程间进行通信时使用,例如父子进程间的通信。...FIFO被称为已命名管道(named pipe), 进程需要按照名称打开 FIFO。...管道FIFO都可以使用read/write函数访问,且读写操作都是按顺序发生的,从文件的开头读取并在末尾写入(先进先出机制)。管道FIFO 必须同时在读写的两端打开。...,没有正常调用fork()或pipe()时返回 NULL --popen()会调用fork()产生子进程,然后从子进程调用/bin/sh -c来执行参数command的指令 --参数type可使用"r

3.7K10

【module】subprocess

subprocess subprocess模块是python从2.4版本开始引入的模块。主要用来取代 一些旧的模块方法,os.system、os.spawn、os.popen、commands....直接使用Popen会对如何运行命令以及如何处理其输入输出有更多控制。通过为stdin, stdout和stderr传递不同的参数。...在python3结果为byte类型,要得到str类型需要decode转换一下 输出结果(读) # 直接执行命令输出到屏幕 >>> subprocess.Popen("ls -l",shell=True...world', None) # 输出结果 # 在需要进行相互交互的输入输出过程也可以使用shtin来实现 # 以下实现打开python3的终端,执行一个print命令 proc = subprocess.Popen...,0表示子进程结束,None未结束 在使用Popen调用系统命令式,建议使用communicate与stdin进行交互并获取输出(stdout),这样能保证子进程正常退出而避免出现僵尸进程: 示例: proc

1.8K40

Linux系统编程-进程间通信(管道)

管道---无名管道命名管道---文件--FIFO 3. 消息队列 4. 共享内存 5. 信号量集 6....标准流管道 标准流管道像文件操作有标准io流一样,管道也支持文件流模式。用来创建连接到另一进程的管道popen和pclose。...popen启动进程之后可以直接与启动的进程间通信,比较方便。...**示例代码: **从标准管道读取 打印/etc/profile的内容: #include #include int main() { FILE *file...命名管道 无名管道只能在亲缘关系的进程间通信大大限制了管道使用,有名管道突破了这个限制,通过指定路径名的形式实现不相关进程间的通信,因为命名管道通信使用管道是一个实体文件,在磁盘上的存在的,而无名管道是存在内存的虚拟文件

1.2K50

Python调用系统命令的六种方法

作为胶水语言,Python可以很方便的执行系统命令,Python3常用的执行操作系统命令有os.system()、os.popen()、subprocess.popen()、subprocess.call...从2.4版本开始引入的模块,主要用来取代 一些旧的模块方法,os.system、os.spawn、os.popen、commands....官方推荐使用该模块执行系统命令,subprocess模块通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。...subprocess.Popen() 使用Popen可以创建进程,并与进程进行复杂的交互。 用法:child = subprocess.Popen(["cmd","arg1"...])...特定的查询空间的命令 stdin=None, # 标准输入 键盘 stdout=PIPE, # -1 标准输出(演示器、终端) 保存到管道以便进行操作 stderr=PIPE

3.6K20

使用 popenpclose 的一点疑问

当我们需要将输出作为标准输入传递给一个命令,或者将一个命令的输出作为标准输入来读取, 一般会想到使用pipe与fork相结合的方式,来重定向标准输入/输出给指定命令。...popen/pclose 帮助我们简化了上述工作,只需要调用: FILE* fpout = popen("more", "w"); 就可以将输出写入more命令。...apue上有一段是这样说明 popen 内部的工作原理的: “这两个函数实现的操作是:创建一个管道,调用fork产生一个子进程,关闭管道的不使用端, 执行一个shell以运行命令,然后等待命令终止。”...写了一个程序验证一下: 测试代码 程序运行后,使用另一个命令窗口查看进程ID: 分别对23153与23154调用lsof查看管道信息: 可以看到在子进程more确实有名为pipe的FIFO命名管道...,但是在父进程却找不到相应的管道,这是怎么回事呢……

15420
领券