首页 > 系统相关 >python中os.system(cmd)函数的返回值:python中的os.system(cmd)的返回值与linux命令返回值的关系

python中os.system(cmd)函数的返回值:python中的os.system(cmd)的返回值与linux命令返回值的关系

时间:2022-12-09 12:11:06浏览次数:52  
标签:code python os cmd system error 返回值 OS

前言

①在实际开发过程中,经常会遇到在Python代码中调用shell脚本,再获取脚本返回的返回值的情况: os.system(cmd) 

②由于系统环境的问题, os.system(cmd) 函数执行命令后的返回值在windows和Linux平台上不同。

③对于windows操作系统,os.system(cmd) 函数执行命令后的返回值就是命令执行后的退出状态码。

④对于Linux操作系统, os.system(cmd) 函数执行命令后的返回值即命令执行后的退出状态码是经过编码的,该函数的返回值与 linux命令返回值两者的转换关系为:该函数的返回值(十进制)转化成16二进制数,截取其高八位(如果低位数是0的情况下,有关操作系统的错误码共 131个,所以低位都是零),然后转乘十进制数即为 linux命令返回值0。

⑤一个字节(Byte)是8位(bit),其中的“8位”指的是8位2进制数。一个int类型的变量能存放4Byte,也就是能存放32bit二进制数,而一个32位二进制数中权值最大的8位就是高8位,举个例子:1111000010101010,那么前面的11110000就是高八位,后面的10101010就是低八位。

⑥高八位和低八位:内存里,一个单元是一个字节,也就是8位。如果是16位的指令,就是同时操作连续的2个内存地址,将这连续的2个内存地址当成一个单位,所以就有高8位和低8位之分。

⑦即在Linux操作系统中: os.system(cmd) 函数的返回值并不是执行程序的返回结果。而是一个16位的数,它的高位才是返回码。比如: os.system(cmd) 返回256即 0×0100,返回码应该是其高位0×01即1。

⑧在Linux操作系统中使用Python工具执行命令的时候可以使用Python中的 sbuprocess 内置模块,其函数的返回值与Linux执行程序的返回结果相同。

例如:

1、exit error code:1

2、exit error code:2

示例

Linux操作系统下:

import os

# ping 本地网段 网关IP地址
result1 = os.system('ping -c 1 192.168.80.1 > /dev/null')
print('ping 192.168.80.1 command error code is', result1)
""" output: ping 192.168.80.1 command error code is 0 """ # ping 其他网段 网关IP地址 result2 = os.system('ping -c 1 192.168.1.1 > /dev/null') print('ping 192.168.1.1 command error code is', result2)
""" output: ping 192.168.1.1 command error code is 256 """

Windows操作系统下:

import os

# ping 本地网段 网关IP地址
result1 = os.system('ping -c 1 192.168.80.1 > /dev/null')
print('ping 192.168.80.1 command error code is', result1)
"""
output: ping 192.168.80.1 command error code is 0
"""

# ping 其他网段 网关IP地址
result2 = os.system('ping -c 1 192.168.1.1 > /dev/null')
print('ping 192.168.1.1 command error code is', result2)
"""
output: ping 192.168.1.1 command error code is 1
"""

查看os模块下的system函数的python在线手册如下:

os.system(command)

Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system(), and has the same limitations. Changes to sys.stdin, etc. are not reflected in the environment of the executed command. If command generates any output, it will be sent to the interpreter standard output stream.

On Unix, the return value is the exit status of the process encoded in the format specified for wait(). Note that POSIX does not specify the meaning of the return value of the C system() function, so the return value of the Python function is system-dependent.

On Windows, the return value is that returned by the system shell after running command. The shell is given by the Windows environment variable COMSPEC: it is usually cmd.exe, which returns the exit status of the command run; on systems using a non-native shell, consult your shell documentation.

 

简单总结一下:

os.system('cmd')的功能是在子shell中将cmd字符串作为作为命令执行,cmd命令执行后产生的任何输出将被发送到命令解释器的标准输出流。同时状态返回码也将输出到解释器标准输出流。但值得注意的是:返回状态码在windows和linux下的意义不同,对于windows,返回值就是命令执行后的退出状态码,而linux平台上,从上面的手册描述来看,退出状态码是经过了编码的,编码构成如下:

exit status indication: a 16-bit number, whose low byte is the signal number that killed the process, and whose high byte is the exit status (if the signal number is zero); the high bit of the low byte is set if a core file was produced.

也就是说,linux平台上返回值(10进制)需转换为16位二进制数,也就是2个字节,高字节代表退出码。因此,将高字节对应的十进制数才是命令执行后的退出码。

 

就拿前面的退出码256来说:

os.system('cmd')返回值为0                      linux命令返回值也为0.

os.system('cmd')返回值为256,对应二进制数为:00000001 00000000,高八位对应十进制为1,因此 linux命令返回值 1

实例

环境前提:Linux操作系统中

1、当 os.system(cmd) 函数的返回值为0:对应的Linux命令返回值也为0。

2、当 os.system(cmd) 返回值为256(十六位二进制数示为:00000001,00000000,高八位转乘十进制为 1):对应的Linux命令返回值为1。

3、当 os.system(cmd) 返回值为512(十六位二进制数示为:00000010,00000000,高八位转乘十进制为 2):对应的Linux命令返回值为2。

4、当 os.system(cmd) 返回值为32512(十六位二进制数示为:01111111,00000000,高八位转乘十进制为 127):对应的Linux命令返回值为127。

其他

Linux命令执行后无论成功与否都有一个返回值:

如果为 0,则表示命令执行成功,其它值则表示错误,具体的错误码含义如下:

 "OS error code   1:  Operation not permitted"
 "OS error code   2:  No such file or directory"
 "OS error code   3:  No such process"
 "OS error code   4:  Interrupted system call"
 "OS error code   5:  Input/output error"
 "OS error code   6:  No such device or address"
 "OS error code   7:  Argument list too long"
 "OS error code   8:  Exec format error"
 "OS error code   9:  Bad file descriptor"
 "OS error code  10:  No child processes"
 "OS error code  11:  Resource temporarily unavailable"
 "OS error code  12:  Cannot allocate memory"
 "OS error code  13:  Permission denied"
 "OS error code  14:  Bad address"
 "OS error code  15:  Block device required"
 "OS error code  16:  Device or resource busy"
 "OS error code  17:  File exists"
 "OS error code  18:  Invalid cross-device link"
 "OS error code  19:  No such device"
 "OS error code  20:  Not a directory"
 "OS error code  21:  Is a directory"
 "OS error code  22:  Invalid argument"
 "OS error code  23:  Too many open files in system"
 "OS error code  24:  Too many open files"
 "OS error code  25:  Inappropriate ioctl for device"
 "OS error code  26:  Text file busy"
 "OS error code  27:  File too large"
 "OS error code  28:  No space left on device"
 "OS error code  29:  Illegal seek"
 "OS error code  30:  Read-only file system"
 "OS error code  31:  Too many links"
 "OS error code  32:  Broken pipe"
 "OS error code  33:  Numerical argument out of domain"
 "OS error code  34:  Numerical result out of range"
 "OS error code  35:  Resource deadlock avoided"
 "OS error code  36:  File name too long"
 "OS error code  37:  No locks available"
 "OS error code  38:  Function not implemented"
 "OS error code  39:  Directory not empty"
 "OS error code  40:  Too many levels of symbolic links"
 "OS error code  42:  No message of desired type"
 "OS error code  43:  Identifier removed"
 "OS error code  44:  Channel number out of range"
 "OS error code  45:  Level 2 not synchronized"
 "OS error code  46:  Level 3 halted"
 "OS error code  47:  Level 3 reset"
 "OS error code  48:  Link number out of range"
 "OS error code  49:  Protocol driver not attached"
 "OS error code  50:  No CSI structure available"
 "OS error code  51:  Level 2 halted"
 "OS error code  52:  Invalid exchange"
 "OS error code  53:  Invalid request descriptor"
 "OS error code  54:  Exchange full"
 "OS error code  55:  No anode"
 "OS error code  56:  Invalid request code"
 "OS error code  57:  Invalid slot"
 "OS error code  59:  Bad font file format"
 "OS error code  60:  Device not a stream"
 "OS error code  61:  No data available"
 "OS error code  62:  Timer expired"
 "OS error code  63:  Out of streams resources"
 "OS error code  64:  Machine is not on the network"
 "OS error code  65:  Package not installed"
 "OS error code  66:  Object is remote"
 "OS error code  67:  Link has been severed"
 "OS error code  68:  Advertise error"
 "OS error code  69:  Srmount error"
 "OS error code  70:  Communication error on send"
 "OS error code  71:  Protocol error"
 "OS error code  72:  Multihop attempted"
 "OS error code  73:  RFS specific error"
 "OS error code  74:  Bad message"
 "OS error code  75:  Value too large for defined data type"
 "OS error code  76:  Name not unique on network"
 "OS error code  77:  File descriptor in bad state"
 "OS error code  78:  Remote address changed"
 "OS error code  79:  Can not access a needed shared library"
 "OS error code  80:  Accessing a corrupted shared library"
 "OS error code  81:  .lib section in a.out corrupted"
 "OS error code  82:  Attempting to link in too many shared libraries"
 "OS error code  83:  Cannot exec a shared library directly"
 "OS error code  84:  Invalid or incomplete multibyte or wide character"
 "OS error code  85:  Interrupted system call should be restarted"
 "OS error code  86:  Streams pipe error"
 "OS error code  87:  Too many users"
 "OS error code  88:  Socket operation on non-socket"
 "OS error code  89:  Destination address required"
 "OS error code  90:  Message too long"
 "OS error code  91:  Protocol wrong type for socket"
 "OS error code  92:  Protocol not available"
 "OS error code  93:  Protocol not supported"
 "OS error code  94:  Socket type not supported"
 "OS error code  95:  Operation not supported"
 "OS error code  96:  Protocol family not supported"
 "OS error code  97:  Address family not supported by protocol"
 "OS error code  98:  Address already in use"
 "OS error code  99:  Cannot assign requested address"
 "OS error code 100:  Network is down"
 "OS error code 101:  Network is unreachable"
 "OS error code 102:  Network dropped connection on reset"
 "OS error code 103:  Software caused connection abort"
 "OS error code 104:  Connection reset by peer"
 "OS error code 105:  No buffer space available"
 "OS error code 106:  Transport endpoint is already connected"
 "OS error code 107:  Transport endpoint is not connected"
 "OS error code 108:  Cannot send after transport endpoint shutdown"
 "OS error code 109:  Too many references: cannot splice"
 "OS error code 110:  Connection timed out"
 "OS error code 111:  Connection refused"
 "OS error code 112:  Host is down"
 "OS error code 113:  No route to host"
 "OS error code 114:  Operation already in progress"
 "OS error code 115:  Operation now in progress"
 "OS error code 116:  Stale NFS file handle"
 "OS error code 117:  Structure needs cleaning"
 "OS error code 118:  Not a XENIX named type file"
 "OS error code 119:  No XENIX semaphores available"
 "OS error code 120:  Is a named type file"
 "OS error code 121:  Remote I/O error"
 "OS error code 122:  Disk quota exceeded"
 "OS error code 123:  No medium found"
 "OS error code 124:  Wrong medium type"
 "OS error code 125:  Operation canceled"
 "OS error code 126:  Required key not available"
 "OS error code 127:  Key has expired"
 "OS error code 128:  Key has been revoked"
 "OS error code 129:  Key was rejected by service"
 "OS error code 130:  Owner died"
 "OS error code 131:  State not recoverable"

 

标签:code,python,os,cmd,system,error,返回值,OS
From: https://www.cnblogs.com/hls-code/p/16968569.html

相关文章

  • Python基础语法
    1.continue语句#!/usr/bin/python#-*-coding:UTF-8-*-n=100whilen>0:n-=1ifn%2==0:continueprint(n)#n-......
  • 基于Python+Django+Vue+MYSQL的社团管理系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 【推荐收藏】Python 常见报错以及解决方案
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • [python] ThreadPoolExecutor线程池
    初识Python中已经有了threading模块,为什么还需要线程池呢,线程池又是什么东西呢?在介绍线程同步的信号量机制的时候,举得例子是爬虫的例子,需要控制同时爬取的线程数,例子中......
  • 用Python代码将XML转为JSON(或dict,字典)
    1.下面的Python代码将任意XML格式文件转化为JSON格式(字典)。除Python自带的模块外,不需要依赖其他任何第三方库。2.XML文件的读取使用Python自带的XML模块。3.关键代码如下......
  • python k-近邻算法 案例实战 预测Pima 印度安人的糖尿病
    前言一、目的和要求理解k-近邻算法的原理,掌握k-近邻算法的应用开发。二、主要内容实例:糖尿病预测任务:预测Pima印度安人的糖尿病数据来源:​​https://www.kaggle.com/uc......
  • Linux操作系统之Linux命令的返回值
    前言①Linux操作系统中,无论是启动桌面程序还是在控制台终端执行命令,所有的程序在结束时,都会返回一个数字值,这个值叫做返回值,或者称为错误号( ErrorNumber )②在控制台终......
  • 查看python中已经安装了哪些包?
    命令pip3list 注意:如果python2x,可以使用piplist替代示例[root@nccztsjb-node-13~]#pip3listDEPRECATION:Thedefaultformatwillswitchtocolumnsin......
  • 【Python】数据入库出库处理/list列表/数组/转字符串
     #!/usr/bin/envpython#-*-coding:utf-8-*-"""@Time:@Author:@File:dbDataTool.py@Version:1.0数据入库出库处理相关工具@Function:"""importha......
  • python http 服务器
    官方自带http模块python-mSimpleHTTPServer8000添加上传功能github仓库simple_http_server#!/usr/bin/python#-*-coding:UTF-8-*-"""SimpleHTTPServ......