python怎么运行cmd命令
使用os.system(“cmd”)
在调用shell脚本后,该方法返回16位二进制数。低位是杀死调用脚本的信号号,高位是脚本的退出状态代码,即脚本中的“exit 1"代码执行后,os.system函数返回值的高位数为1,如果低位数为0,则函数返回值为0×100,转换为10进制得到256。
如果我们需要得到os,如果我们需要得到os.system的正确返回值,使用位移操作可以恢复返回值:
>>>n=os.system(test.sh) >>>n>>8 >>>3
这是最简单的方法,特点是程序在执行时会在linux上发布cmd执行的信息。使用前需要import os。
os.system("ls") 仅在子终端运行系统命令, 命令执行后无法获得返回信息。
os.Popen
这种调用方法是通过管道实现的。函数返回到file-like的对象,其中包含脚本输出(可以简单地理解为echo输出)。使用os.popen调用testten.sh情况:python调用shell脚本有两种方法:os.system(cmd)或os.popen(cmd),前者的返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容。根据需要选择实际使用。显然,就像呼叫一样ls“这样的shell命令,应该用popen的方法来获取内容。
popen(command[,mode='r'[,bufsize]])->pipe tmp=os.popen('ls*.py').readlines()
相关推荐:Python入门教程
subprocess.Popen
现在大多数人喜欢使用Popen。Popen方法不会在linux上打印cmd执行的信息。的确,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)
bufsize参数:指定缓冲。
参数executable用于指定可执行程序。一般来说,我们通过args参数设置要操作的程序。如果将参数shell设置为 True,executable将使用指定程序的shell。在windows平台下,COMSPEC环境变量指定默认shell。
stdin参数, stdout, stderr分别表示程序的标准输入、输出和错误句柄。它们可以是PIPE、文件描述符或文件对象,也可以设置为None,表示从父亲的过程中继承。
参数prexec_fn仅在Unix平台下有效指定可执行对象(callable object),在子过程运行前,它将被调用。
Close参数_sfs:在windows平台下,如果close_fds设置为true,新创建的子流程将不会继承父流程的输入、输出和错误管理 道。我们不能将close_fds设置为标准输入、输出和错误,同时重定向过程(stdin, stdout, stderr)。
如果将参数shell设置为true,则该程序将通过shell执行。
用于设置子过程的当前目录的参数cwd。
参数env是指定子过程的环境变量的字典类型。如果env = None,从父亲的过程中继承子过程的环境变量。
Universal参数newlines:文本的换行符在不同的操作系统下是不同的。例如:windows下使用“/r/nLinux表示变化,Linux使用‘/n"。如果将此参数设置为True,Python将这些换行符统一为‘/n’来处理。
参数startupinfo和createionflags只在windows下工作。它们将传递到底层的createProces()函数,以设置子过程的一些属性,如主窗的外观、过程的优先级等。
subprocess.PIPE
创建Popen对象时,subprocess.Stdin可以初始化PIPE, stdout或stder参数表示与子过程通信的标准流。
subprocess.STDOUT
在创建Popen对象时,用于初始化stder参数,表示通过标准输出流输出错误。
Popen方法:
Popen.poll()
检查子过程是否已结束。设置并返回returncode属性。
Popen.wait()
等待子过程结束。设置并返回returncode属性。
Popen.communicate(input=None)
与子过程交互。向stdin发送数据,或从stdout和stder中读取数据。可选参数input指定发送到子过程的参数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。注:如果您想通过流程的stdin向其发送数据,则必须将参数stdin设置为PIPE,以便在创建popen对象时。同样,例如 如果你想从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。