python执行终端命令(含交互情况)

一、使用os.system

import os
status_code = os.system('ls ~')
print(status_code )
  • 该方法会在console中打印命令输出内容,但不返回给变量。
  • 它仅返回执行状态码,执行成功为0,反之1。
  • 若需要sudo下输入密码,可使用如下方法:
  • import os
    status_code = os.system('echo password | sudo -S ls')
    print(status_code )
    
    # sudo -S: 从标准输入读取sudo密码

    二、使用os.popen

    import os
    res = os.popen("ls ~").read()
    print(res) 
  • 该方法不会在console中打印输出内容,会将内容直接返回给变量。

  • 三、使用subprocess

    import subprocess
    
    # 三种方式:
    
    status_code = subprocess.call("ls", shell=True)      # 效果同os.system(cmd)
    
    res = subprocess.getoutput('ls')                     # 效果同os.popen(cmd)
    
    status_code, res = subprocess.getstatusoutput('ls')  # 返回status_code与res
    
  • subprocess的三种用法适用大部分场景。

  • 四、使用Pexpect

    import pexpect
    
    # 想执行的指令
    cmd = '7za x {}'.format('test.zip')
    
    # 执行脚本
    child = pexpect.spawn(cmd)   
             
    # 如果返回内容遇到了password,则输入密码123456
    child.expect('password')
    child.sendline('123456')
    child.expect('is Ok')
    
    # 打印输出内容
    print(child.before.decode())
  • 在遇到需要交互的指令时(如需要输入密码),可以使用Pexpect。
  • 参考

    python执行终端命令及自动密码输入_python输出cmd命令后,需要密码,怎么输入密码-CSDN博客

    一文看懂python如何执行cmd命令_python执行cmd命令-CSDN博客

    作者:Ziieq

    物联沃分享整理
    物联沃-IOTWORD物联网 » python执行终端命令(含交互情况)

    发表回复