bonfy / problems

record problems I have met and solved
2 stars 1 forks source link

python执行系统命令的方法:os.system(), os.popen(), subprocess.Popen() #7

Open bonfy opened 7 years ago

bonfy commented 7 years ago

遇到一个问题,需要 python 调用 command 命令读取命令的返回值,可是发现一直使用的 os.system 只能返回 0 、248 之类的,遂查之

bonfy commented 7 years ago

原文链接: http://blog.csdn.net/windone0109/article/details/8895875

os.system(cmd):

该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,即脚本中“exit 1”的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情况下,则函数的返回值是0×100,换算为10进制得到256。

如果我们需要获得os.system的正确返回值,那使用位移运算可以还原返回值:

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

os.popen(cmd)

通过os.popen()返回的是 file read 的对象,对其进行读取read()操作可以看到执行的输出

例如:print os.popen("adb shell ls /sdcard/ | findstr aa.png").read() >>> 输出:aa.png(若aa.png存在,否则输出为空)

subprocess.Popen()

subprocess模块被推荐用来替换一些老的模块和函数,如:os.system、os.spawn、os.popen

subprocess模块目的是启动一个新的进程并与之通信,最常用是定义类Popen,使用Popen可以创建进程,并与进程进行复杂的交互。

pipe = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout
print pipe.read()
bonfy commented 7 years ago

Python模块subprocess小记 - http://blog.csdn.net/wirelessqa/article/details/7778761