关于python调用windows、linux的cmd命令:

关于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没有多大区别,基本通用,除非本身命令不一致

你可能感兴趣的:(python知识)