关于python调用cmd命令:
主要介绍两种方式:
python的os模块
os模块调用CMD命令有两种方式:os.popen(),os.system() 都是用当前进程来调用。
os.system是无法获取返回值的。当运行结束后接着往下面执行程序。
用法如:os.system(“ipconfig”)
import os
os.system("ipconfig")
执行结果如下:
Windows IP 配置
无线局域网适配器 无线网络连接:
媒体状态 . . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
以太网适配器 本地连接:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::e1c4:78dd:65a8:7bac%13
IPv4 地址 . . . . . . . . . . . . : 192.168.180.102
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.180.1
OS.popen带返回值的,如何获取返回值。
如下:
p = os.popen(cmd)
print p.read() #得到的是个字符串。
import os
d = os.popen("ipconfig")
print(d.read())
执行结果如下:
Windows IP 配置
无线局域网适配器 无线网络连接:
媒体状态 . . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
以太网适配器 本地连接:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::e1c4:78dd:65a8:7bac%13
IPv4 地址 . . . . . . . . . . . . : 192.168.180.102
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.180.1
这两个都是用当前进程来调用,也就是说它们都是阻塞式的。
windows下cmd一次执行多条命令:
import os # os.system("ipconfig") p=os.popen('"ipconfig"&"help" ') #p=os.popen("ipconfig"+" && "+"help") #重点,1个&和2个&效果一样 print(p.read())
python执行linux命令的三种方式
import subprocess
import os
def subprocess_():
"""
subprocess模块执行linux命令
:return:
"""
subprocess.call("ls") # 执行ls命令
def system_():
"""
system模块执行linux命令
:return:
"""
# 使用system模块执行linux命令时,如果执行的命令没有返回值res的值是256
# 如果执行的命令有返回值且成功执行,返回值是0
res = os.system("ls")
def popen_():
"""
popen模块执行linux命令。返回值是类文件对象,获取结果要采用read()或者readlines()
:return:
"""
val = os.popen('ls').read() # 执行结果包含在val中
def main():
subprocess_() # 方法1
system_() # 方法2
popen_() # 方法3
if __name__ == '__main__':
main()
个人理解:
python执行命令行,在win和linux没有多大区别,基本通用,除非本身命令不一致