python os.system()和os.popen()

1》python调用Shell脚本,有两种方法:os.system()和os.popen(),
前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容。
>>>help(os.system)
Help on built-in function system in module posix:
system(...)
    system(command) -> exit_status
    Execute the command (a string) in a subshell.
>>> help(os.popen)
Help on built-in function popen in module posix:
popen(...)
    popen(command [, mode=‘r‘ [, bufsize]]) -> pipe
    Open a pipe to/from a command returning a file object.
2》假定有一个shell脚本test.sh:
[email protected]:~$ vi test.sh
[email protected]:~$ more test.sh
#!/bin/bash
echo ‘hello python!‘
echo ‘hello world!‘
exit 1
[email protected]:~$
2.1》os.system(command):该方法在调用完shell脚本后,返回一个16位的二进制数,
低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,
即脚本中“exit 1”的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情况下,
则函数的返回值是0x0100,换算为十进制得到256。
要获得os.system的正确返回值,可以使用位移运算(将返回值右移8位)还原返回值:
>>> import os
>>> os.system("./test.sh")
hello python!
hello world!
256
>>> n=os.system("./test.sh")
hello python!
hello world!
>>> n
256
>>> n>>8
1
>>>
2.2》os.popen(command):这种调用方式是通过管道的方式来实现,函数返回一个file对象,
里面的内容是脚本输出的内容(可简单理解为echo输出的内容),使用os.popen调用test.sh的情况:
>> import os
>>> os.popen("./test.sh")
<open file ‘./test.sh‘, mode ‘r‘ at 0x7f6cbbbee4b0>
>>> f=os.popen("./test.sh")
>>> f
<open file ‘./test.sh‘, mode ‘r‘ at 0x7f6cbbbee540>
>>> f.readlines()
[‘hello python!\n‘, ‘hello world!\n‘]
>>>
3》像调用”ls”这样的shell命令,应该使用popen的方法来获得内容,对比如下:
>>> import os
>>> os.system("ls")   #直接看到运行结果
Desktop    Downloads     Music     Public     Templates  Videos
Documents  examples.desktop  Pictures  systemExit.py  test.sh
0    #返回值为0,表示命令执行成功
>>> n=os.system(‘ls‘)
Desktop    Downloads     Music     Public     Templates  Videos
Documents  examples.desktop  Pictures  systemExit.py  test.sh
>>> n
0
>>> n>>8   #将返回值右移8位,得到正确的返回值
0
>>> f=os.popen(‘ls‘) #返回一个file对象,可以对这个文件对象进行相关的操作
>>> f
<open file ‘ls‘, mode ‘r‘ at 0x7f5303d124b0>
>>> f.readlines()
[‘Desktop\n‘, ‘Documents\n‘, ‘Downloads\n‘, ‘examples.desktop\n‘, ‘Music\n‘, ‘Pictures\n‘, ‘Public\n‘, ‘systemExit.py\n‘, ‘Templates\n‘, ‘test.sh\n‘, ‘Videos\n‘]
>>>
总结:os.popen()可以实现一个“管道”,从这个命令获取的值可以继续被使用。因为它返回一个文件对象,可以对这个文件对象进行相关的操作。

但是如果要直接看到运行结果的话,那就应该使用os.system,用了以后,立竿见影!

原文地址:https://www.cnblogs.com/hdk1993/p/8428720.html

时间: 2024-12-24 04:44:35

python os.system()和os.popen()的相关文章

os.system和os.popen函数

os.system和os.popen函数: python调用shell命令有2种方法:os.system()和os.popen() os.system()的返回值只会有0(成功),1,2:os.popen()会把执行命令的输出作为值返回,可实现一个"管道",从这个命令获取的值可以继续被调用. 示例: vi a1.py #!/usr/bin/python import os a = os.popen('df -h /').readlines()a2 = ''.join(a)print a

Python os.system 和 os.popen的区别

(1) os.system # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 system(command) -> exit_statusExecute the command (a string) in a subshell. # 如果再命令行下执行,结果直接打印出来 1 >>> os.system('ls') 2 3 04101419778.CHM bash document media py-django video 4 5 11.wmv books down

[转] Python执行系统命令的方法 os.system(),os.popen(),commands

最近在做那个测试框架的时候发现 Python 的另一个获得系统执行命令的返回值和输出的类. 最开始的时候用 Python 学会了 os.system() 这个方法是很多比如 C,Perl 相似的. os.system('cat /proc/cpuinfo') 但是这样是无法获得到输出和返回值的,继续 Google,之后学会了 os.popen(). output = os.popen('cat /proc/cpuinfo')print output.read() 通 过 os.popen() 返

Python执行系统命令的方法 os.system(),os.popen(),commands

转载:http://blog.csdn.net/b_h_l/article/details/12654749 第一种:使用os.system() import osos.system('cat /etc/profile') 第二种:使用os.popen() import os output = os.popen('cat /proc/cpuinfo') print output.read() 通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以

os.system和os.popen的区别

#!/usr/bin/env python #coding:utf-8 import os,sys print os.system("dir")         #只执行命令,不保存结果 print os.popen("dir").read()     #执行结果存到内存 print sys.path               #输出标准库和第三方库路径

os.system() 和 os.popen()

1.os.popen(command[, mode[, bufsize]])  os.system(command) 2.os.popen() 功能强于os.system() , os.popen() 可以返回回显的内容,以文件描述符返回.eg:t_f = os.popen ("ping 192.168.1.1")print t_f.read() 或者:for line in os.popen("dir"):    print line 最近在做那个测试框架的时候发

[py] os.system os.popen commands 执行shell

? 1.仅输出到屏幕,pwd保存的是状态<=====可用于执行shell命令 pwd=os.system(pwd) ? 2.popen可以保存命令结果 pwd=os.popen('pwd').read() ? 3,返回状态和命令结果 pwd=commands.getstatusoutput('pwd') (0, '/home/py')

Python调用外部程序——os.system()和subprocess.call()

通过os.system和subprocess.call()函数调用其他程序 预备知识:cmd中打开和关闭程序 cmd中打开程序 a.打开系统自带程序 系统自带的程序的路径一般都已加入环境变量之中,只需在cmd窗口中直接输入程序名称即可. 以notepad为例,直接在cmd窗口中输入notepad后回车即可打开. b.打开自己安装且没有加入环境变量的程序 以网易云音乐为例,在cmd窗口中需要输入完整的程序路径  "D:\Program Files (x86)\Netease\CloudMusic\

Python 基础之模块之os os.path 及os与shutil对比

一: os 对系统进行操作 #注:以下操作都在linux环境下操作,且很多运行之前需要做好相关条件import os#(1)system() 在python总执行系统命令#os.system("touch ceshi.txt") #linux#os.system("ifconfig") # os.system("mspaint")  #windows# os.system("ipconfig")  #乱码#(2)popen()