知行编程网知行编程网  2022-08-11 14:19 知行编程网 隐藏边栏  78 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python怎么运行cmd命令的相关知识,包括python如何进入cmd,以及python执行多条cmd命令这些编程知识,希望对大家有参考作用。

如何在python中运行cmd命令


使用os.system(“cmd”)

调用shell脚本后,该方法返回一个16位的二进制数,低位是杀死被调用脚本的信号号,高位是脚本的退出状态码,即在"的代码之后脚本中的 exit 1" 被执行,os.系统函数返回值的高位为1,如果低位为0,则函数的返回值为0×100,转换为十进制得到256。

如果我们需要得到 os.system 的正确返回值,我们可以使用 shift 操作恢复返回值:

>>> n = os.system(test.sh)
>>> n >> 8
>>> 3

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

os.system("ls") 只在子终端运行系统命令,无法获取命令执行后的返回信息。


os.Popen

这个调用方法是通过管道实现的,函数返回一个类文件对象,其内容就是脚本输出的内容(可以简单理解为echo输出的内容)。使用os.popen调用test.sh的案例:python调用shell脚本,有两种方法:os.system(cmd)或者os.popen(cmd),前者的返回值是退出状态码脚本,后者的返回值是脚本执行过程中的输出。在实际使用中,根据需要进行选择。显然,调用“ls”之类的shell命令应该使用popen的方法来获取内容。

popen(command [, mode='r' [, bufsize]]) -> pipe
tmp = os.popen('ls *.py').readlines()


subprocess.Popen

现在大多数人都喜欢使用 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)

参数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)

与子进程交互。向标准输入发送数据,或从标准输出和标准错误读取数据。可选参数输入指定要发送到子进程的参数。 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 将返回一个文件对象,供子进程发送命令。否则返回无。

Popen.stdout

如果创建Popen对象时参数stdout设置为PIPE,Popen.stdout会返回一个文件对象供子进程发送命令。否则返回无。

Popen.stderr

如果创建Popen对象时参数stdout设置为PIPE,Popen.stdout会返回一个文件对象供子进程发送命令。否则返回无。

Popen.pid

获取子进程的进程ID。

Popen.returncode

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

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享