python中cmd全称_【转】Python中执行cmd的三种方式

原文链接:http://blog.csdn.net/menglei8625/article/details/7494094

目前我使用到的python中执行cmd的方式有三种:

1. 使用os.system("cmd")

这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息。使用前需要import os。

os.system("ls")

2. 使用Popen模块产生新的process

现在大部分人都喜欢使用Popen。Popen方法不会打印出cmd在linux上执行的信息。的确,Popen非常强大,支持多种参数和模式。使用前需要from subprocess import Popen, PIPE。但是Popen函数有一个缺陷,就是它是一个阻塞的方法。如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用wait()方法,但是也不能获得执行的返回值了。

Popen原型是:

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

参数bufsize:指定缓冲。我到现在还不清楚这个参数的具体含义,望各个大牛指点。

参数executable用于指定可执行程序。一般情况下我们通过args参数来设置所要运行的程序。如果将参数shell设为 True,executable将指定程序使用的shell。在windows平台下,默认的shell由COMSPEC环境变量来指定。

参数stdin, stdout, stderr分别表示程序的标准输入、输出、错误句柄。他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。

参数preexec_fn只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。

参数Close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管 道。我们不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。

如果参数shell设为true,程序将通过shell来执行。

参数cwd用于设置子进程的当前目录。

参数env是字典类型,用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。

参数Universal_newlines:不同操作系统下,文本的换行符是不一样的。如:windows下用’/r/n’表示换,而Linux下用 ‘/n’。如果将此参数设置为True,Python统一把这些换行符当作’/n’来处理。

参数startupinfo与createionflags只在windows下用效,它们将被传递给底层的CreateProcess()函数,用 于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等。

subprocess.PIPE

在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数,表示与子进程通信的标准流。

subprocess.STDOUT

创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出流输出。

Popen的方法:

Popen.poll()

用于检查子进程是否已经结束。设置并返回returncode属性。

Popen.wait()

等待子进程结束。设置并返回returncode属性。

Popen.communicate(input=None)

与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。同样,如 果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。

Popen.send_signal(signal)

向子进程发送信号。

Popen.terminate()

停止(stop)子进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束子进程。

Popen.kill()

杀死子进程。

Popen.stdin

如果在创建Popen对象是,参数stdin被设置为PIPE,Popen.stdin将返回一个文件对象用于策子进程发送指令。否则返回None。

Popen.stdout

如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

Popen.stderr

如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

Popen.pid

获取子进程的进程ID。

Popen.returncode

获取进程的返回值。如果进程还没有结束,返回None。

例如:

p = Popen("cp -rf a/* b/", shell=True, stdout=PIPE, stderr=PIPE)

p.wait()

if p.returncode != 0:

print "Error."

return -1

3. 使用commands.getstatusoutput方法

这个方法也不会打印出cmd在linux上执行的信息。这个方法唯一的优点是,它不是一个阻塞的方法。即没有Popen函数阻塞的问题。使用前需要import commands。

例如:

status, output = commands.getstatusoutput("ls")

还有只获得output和status的方法:

commands.getoutput("ls")

commands.getstatus("ls")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库字段 到类 java bean_将数据库中表的字段自动转换为javaBean实体类

具体代码如下:package param;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.Resul…

el-drawer点击的时候为什么有边框_剪映教学之视频拍摄加剪辑【一】:出视频上下黑色边框模糊效果,视频广告配音...

抖音小视频已经成为风靡全国的一个app了,很多人都喜欢看抖音来打发时间,而经常看小视频的应该都见到过这种现象,就是有一些小视频我们在观看的时候,发现这个小视频的上下都有黑色边框或者模糊的效果,实际这都是一些拍摄…

java swt 下拉列表_求助:SWT 下拉列表

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼public class HelloWorldCombo {//下拉列表项 private static final String[] ITEMS { "Alpha", "Bravo", "Charlie", "Delta","Echo", "Foxtrot", "Golf"…

python html转换为普通文本_将HTML表转换为可读的纯文本的Python解决方案

用这个怎么样:但是,使用collections.OrderedDict()而不是简单字典来保持顺序。有了字典之后,很容易从中获取和格式化文本:使用Colt 45溶液:import xml.etree.ElementTreeimport collectionss """\Heig…

java synchronized 静态_Java之Synchronized修饰实例方法和静态方法

一、Synchronized修饰实例方法,实际上是对调用该方法的对象加锁,俗称“对象锁”情况一:​同一个对象在两个线程中分别访问该对象的两个同步实例方法结果:会产生互斥​原因:因为锁针对的是对象,当对象调用​…

网站漏洞扫描工具_如何实现免费网站漏洞扫描?推荐一款神器给你

网站漏洞想必有网站的人都比较了解,想要了解网站漏洞,最好的办法就是给网站做一次漏洞扫描,网站漏扫产品比较多,费用也从几十/次到几千/次不等,但是对于我这种小企业来说,几千一次也是非常贵的,…

java mvc设计模式_JavaEE知识点:MVC设计模式

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及…

mysql 导出数据字典_操作MySQL?这个库比pymysql香一百倍

原创: 阿亮 Python极客社区操作MySQL,我们都习惯于用pymsq,基本流程就是创建连接创建游标执行SQL关闭连接代码是这样的import pymysql# 1.创建连接conn pymysql.connect(host127.0.0.1, port3306, userroot, passwordroot, charsetutf8)# 2.…

java putifabsent_java8中Map的一些骚操作总结

一 前言本篇内容是关于 map 新特性的一些方法使用上的介绍,如果有不足之处欢迎补充!!二 map新特性关于以下函数式编程的函数的计算知识追寻者都使用 简单字符串代替了,参数无非就是Key,value;2.1 forEachforEach迭代&a…

python对操作系统要求_python之--并发编程__操作系统

操作系统1.操作系统的发展史1)手工操作 —— 穿孔卡片1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式。此时还没有操作系统的概念。程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输…

macd 公式 java_EMA指标和MACD指标的JAVA语言实现

最近做的项目需要实现EMA和MACD,但苦于网上没有具体的实现算法。所以自己尝试着编写了一套。已经和通达信等主流股票分析软件核对过结果,并将其开源放在GitHub上,含Junit 测试用例。GitHub地址:https://github.com/wizardbyron/fi…

java 注解 target_详解JDK 5 Annotation 注解之@Target的用法

前言目前,越来越多的架构设计在使用注解,例如spring3.0、struts2等框架。让我们先来看看注解的定义。如下是一段使用了JDK 5 Annotation Target的代码:Target({ElementType.METHOD})Retention(RetentionPolicy.RUNTIME)InheritedDocumentedpu…

python现在时间减去过去时间等于20分钟怎么写_获取当前时间减去10分钟的话SQL语句怎么写...

展开全部对于每个类型拥有的值范围以及并且指定日期e68a84e8a2ad62616964757a686964616f31333363353834何时间值的有效格式的描述见7.3.6 日期和时间类型。这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:mysq…

java 并发测试main方法_Java并发测试

要求:模拟200个设备,尽量瞬间并发量达到200。思路第一种:线程池模拟200个线程——wait等待线程数达200——notifyAll唤醒所有线程第二种:线程池模拟200个线程——阻塞线程——达到200条件释放比较两种方案都可以实现瞬时高并发的模…

pajek软件使用方法_使用Jco远程连接SAP软件系统方法

作者:JongWill声明:本文章仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP软件,相应著作权归SAP所有。)SAP公司的ERP系统是一套成熟的套装软件,它是博大精深的,但也不是无所…

linux mysql 安装innodb_在ubuntu Mysql 5.7 安装InnoDB Memcached 插件

在ubuntu Mysql 5.7 安装Memcached 插件参考:https://dev.mysql.com/doc/refman/5.7/en/innodb-memcached-setup.htmlMySQL 5.7 Reference Manual / The InnoDB Storage Engine / InnoDB memcached Plugin15.20 InnoDB memcached Plugin15.20.1 Benefits of the Inn…

python怎么定义正方形函数_python – Matplotlib自定义图例以显示正方形而不是矩形...

这是我尝试将条形图的图例从矩形更改为方形:import matplotlib.patches as patchesrect1 patches.Rectangle((0,0),1,1,facecolor#FF605E)rect2 patches.Rectangle((0,0),1,1,facecolor#64B2DF)plt.legend((rect1, rect2), (2016, 2015))但是当我绘制这个时,我仍然…

java 排列3_java中的三大排序算法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/pqwGreenhand/article/details/53581577一、冒泡排序已知一组无序数据a[1]、a[2]、……a[n]&#xff…

python 批量查询网页导出结果_python批量查询网页的HTTP状态码

最近业余时间在改版一个网站,改版之前频繁调整了一些栏目的属性,包括栏目的层级,这种最怕就是调整了栏目的从属关系,导致了栏目的URL地址改变,一旦改版就导致整个栏目及其下面的文章页地址变更,成为死链。而…

java 文件夹存在文件_Java判断是否存在文件和文件夹

获取项目绝对路径:this.getClass().getClassLoader().getResource(".").getPath()1、判断文件是否存在,不存在创建文件File filenew File("C:\\Users\\QPING\\Desktop\\JavaScript\\2.htm");if(!file.exists()){try {file.createNew…