python执行系统命令的方法
os.popen()、os.system()、subprocess.Popen()、subprocess.getoutput()、subprocess.getstatusoutput()
1、os.popen(cmd): 返回一个地址: <os._wrap_close object at 0x101f22dc0>
2、os.popen(cmd).read():返回所读取得地址的内容
3、os.system(cmd):返回执行结果状态码(执行的内容会显示,但不会返回),0表示正确,非0表示错误
4.1、subprocess.run(cmd,shell=True):返回执行结果及 CompletedProcess 实例 => CompletedProcess(args='ls -l', returncode=0)
输入参数可以是一个字符串或列表,如果是字符串则需要shell = True;
4.2、subprocess.run(["ls", "-l", "/dev/null"]): 输入参数是一个列表
crw-rw-rw- 1 root wheel 3, 2 Jan 22 17:09 /dev/null
CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0)
5、status, output = subprocess.getstatusoutput(cmd):返回的结果和状态分开
6、subprocess.getoutput(cmd):只返回运行结果,无运行状态
import os, subprocess a = "-l" cmd = 'ls {}'.format(a) print("-------os.popen(cmd):返回一个地址") os_popen = os.popen(cmd) print(os_popen) print("\n-------os.popen(cmd).read():读取地址的内容") os_popen_read = os.popen(cmd).read() print(os_popen_read) print("\n-------os.system(cmd):返回内容以及执行结果,0表示正确") os_system = os.system(cmd) print(os_system) print("\n-------os.system(cmd):返回内容以及执行记结果,非0表示错误") os_system_error = os.system(cmd+"4") print(os_system_error) print("\n------subprocess.run(cmd,shell=True):输入参数可以是一个列表或字符串,如果是一个字符串,则需要shell=True") subprocess_run_string = subprocess.run(cmd,shell=True) print(subprocess_run_string) print("\n------subprocess.run([string1, string2]):输入参数可以是一个列表或字符串如果是一个字符串则需要shell=True") subprocess_run_list = subprocess.run(["ls", "-l", "/dev/null"]) print(subprocess_run_list) print("\n-------status, output = subprocess.getstatusoutput(cmd):运行结果和状态分开返回") status, output = subprocess.getstatusoutput(cmd) print("-------status--------") print(status) print("-------output--------") print(output) print("\n-----subprocess.getoutput(cmd):只返回运行结果") subprocess_getoutput = subprocess.getoutput(cmd) print(subprocess_getoutput)
-------os.popen(cmd):返回一个地址 <os._wrap_close object at 0x101f22dc0> -------os.popen(cmd).read():读取地址的内容 total 40 -rw-r--r-- 1 ad staff 172 Jan 22 16:26 listNode.py -rw-r--r--@ 1 ad staff 1153 Jan 22 16:39 test3.py -rw-r--r-- 1 ad staff 521 Jan 22 00:35 一星.py -rw-r--r-- 1 ad staff 435 Jan 22 00:36 排序汇总.py -rw-r--r-- 1 ad staff 3399 Jan 22 00:36 算法.py -------os.system(cmd):返回内容以及执行结果,0表示正确 total 40 -rw-r--r-- 1 ad staff 172 Jan 22 16:26 listNode.py -rw-r--r--@ 1 ad staff 1153 Jan 22 16:39 test3.py -rw-r--r-- 1 ad staff 521 Jan 22 00:35 一星.py -rw-r--r-- 1 ad staff 435 Jan 22 00:36 排序汇总.py -rw-r--r-- 1 ad staff 3399 Jan 22 00:36 算法.py 0 -------os.system(cmd):返回内容以及执行记结果,非0表示错误 ls: illegal option -- 4 usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...] 256 ------subprocess.run:输入参数可以是一个列表,如果是一个字符串,则需要shell = True total 40 -rw-r--r-- 1 ad staff 172 Jan 22 16:26 listNode.py -rw-r--r--@ 1 ad staff 1153 Jan 22 16:39 test3.py -rw-r--r-- 1 ad staff 521 Jan 22 00:35 一星.py -rw-r--r-- 1 ad staff 435 Jan 22 00:36 排序汇总.py -rw-r--r-- 1 ad staff 3399 Jan 22 00:36 算法.py CompletedProcess(args='ls -l', returncode=0) -------status, output = subprocess.getstatusoutput:运行结果和状态分开返回 -------status-------- 0 -------output-------- total 40 -rw-r--r-- 1 ad staff 172 Jan 22 16:26 listNode.py -rw-r--r--@ 1 ad staff 1153 Jan 22 16:39 test3.py -rw-r--r-- 1 ad staff 521 Jan 22 00:35 一星.py -rw-r--r-- 1 ad staff 435 Jan 22 00:36 排序汇总.py -rw-r--r-- 1 ad staff 3399 Jan 22 00:36 算法.py -----subprocess.getoutput(cmd):只返回运行结果 total 40 -rw-r--r-- 1 ad staff 172 Jan 22 16:26 listNode.py -rw-r--r--@ 1 ad staff 1153 Jan 22 16:39 test3.py -rw-r--r-- 1 ad staff 521 Jan 22 00:35 一星.py -rw-r--r-- 1 ad staff 435 Jan 22 00:36 排序汇总.py -rw-r--r-- 1 ad staff 3399 Jan 22 00:36 算法.py [Finished in 0.3s]