Python编程:subprocess执行命令行命令

举报
彭世瑜 发表于 2021/08/14 00:11:55 2021/08/14
1.6k+ 0 0
【摘要】 函数说明os.system(command)返回状态码,执行结果输出到屏幕os.popen(command).read()返回执行结果,没有状态码--subprocess.run()Python 3.5中新增的函数。执行指定的命令,等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例subprocess.call()执行指定的命令,返回命令执...
函数 说明
os.system(command) 返回状态码,执行结果输出到屏幕
os.popen(command).read() 返回执行结果,没有状态码
- -
subprocess.run() Python 3.5中新增的函数。执行指定的命令,等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例
subprocess.call() 执行指定的命令,返回命令执行状态,其功能类似于os.system(cmd)
subprocess.check_call() Python 2.5中新增的函数。 执行指定的命令,如果执行成功则返回状态码,否则抛出异常。其功能等价于subprocess.run(…, check=True)
subprocess.check_output() Python 2.7中新增的的函数。执行指定的命令,如果执行状态码为0则返回命令执行结果,否则抛出异常
subprocess.getoutput(cmd) 接收字符串格式的命令,执行命令并返回执行结果,其功能类似于os.popen(cmd).read()和commands.getoutput(cmd)
subprocess.getstatusoutput(cmd) 执行cmd命令,返回一个元组(命令执行状态, 命令执行结果输出)

代码示例


import subprocess
import os

cmd = "pwd"

# 返回命令执行状态码,而将命令执行结果输出到屏幕
ret = os.system(cmd)
print("system ret:", ret)
"""
/Users/myproject/mydemo/demo
system ret: 0
"""

# 可以获取命令执行结果,但是无法获取命令执行状态码
ret = os.popen(cmd)
print("popen ret: ", ret.read())
"""
popen ret:  /Users/myproject/mydemo/demo
"""

ret = subprocess.run(cmd)
print("run ret: ", ret.returncode)
# run ret:  0

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
p.wait()
print("Popen ret: ", p.stdout.read())
"""
Popen ret:  b'/Users/myproject/mydemo/demo\n'
"""

exitcode, output = subprocess.getstatusoutput(cmd)
print("exitcode: ", exitcode)
print("output: ", output)
"""
exitcode:  0
output:  /Users/myproject/mydemo/demo
"""
  
 

汇成一个函数


import subprocess

class CommandException(Exception): pass
def run_cmd(command): exitcode, output = subprocess.getstatusoutput(command) if exitcode != 0: raise CommandException(output) return output
if __name__ == '__main__': cmd = "pwd" print("output: ", run_cmd(cmd)) # output:  /Users/myproject/mydemo/demo
  
 

参考
Python之系统交互(subprocess)

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/86367256

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。