如何通过python程序脚本运行终端命令行命令?

常见方法:

  • 1、subprocess模块

    • subprocess.Popen() 方法【异步非阻塞

      • 示例1

        import subprocess, os
        import time
        
        # 启动子进程(异步非阻塞)
        # process = subprocess.Popen("python test2.py")
        process = subprocess.Popen(["python", "test2.py"])
        
        time.sleep(2) # 模拟执行其它任务
        
        # 以下两行命令能保证子进程被完全终止
        # 终止子进程
        process.terminate()  # 或者使用 process.kill()
        # 等待子进程终止
        process.wait() # 没有获取交互结果的能力
        # stdinput, stderr = process.communicate() 用于与子进程进行交互,并等待子进程完成,同时能够获取子进程的标准输出和标准错误输出
        # print(stdinput)
        # print(stderr)
        
        # 判断子进程终止状态
        if process.returncode is not None:
            print("子进程已终止,返回码: ", process.returncode)
        else:
            print("无法确定子进程的终止状态")
      • 示例2

        import subprocess
        
        command = 'adb -s 127.0.0.1:62001 shell "su ; cd /data/local/tmp ; ls"'
        process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        output, error = process.communicate()
        
        if process.returncode == 0:
            print("Command executed successfully.")
            print("Output:\n", output.decode())
        else:
            print("Command execution failed.")
            print("Error:\n", error.decode())
    • subprocess.run() 方法 【同步阻塞】

      • 返回CompletedProcess对象,其中包含有关命令执行的信息,如返回码、标准输出和标准错误输出。
        import subprocess
        
        # 执行外部命令
        result = subprocess.run(["python", "test2.py"], capture_output=True, text=True)
        
        # 获取返回码
        print(f"返回码:{result.returncode}")
        
        # 获取标准输出
        print(f"标准输出:{result.stdout}")
        
        # 获取标准错误输出
        print(f"标准错误输出:{result.stderr}")
    • subprocess.getoutput() 方法 【同步阻塞】

      • 返回标准输出字符串
        import subprocess
        
        # 执行外部命令
        output = subprocess.getoutput("python test2.py")
        
        # 打印标准输出
        print(output)
    • subprocess.check_output()方法【同步阻塞】

      • 返回标准输出字节
        import subprocess
        
        cmd = 'java -jar unidbg-0.9.7.jar'
        result = subprocess.check_output(cmd, shell=True, cwd='unidbg_0_9_7_jar') # cwd参数表示进入某个目录执行的命令
        print(result.strip().decode().splitlines()[0])
  • 2、os模块

    • os.system() 方法【同步阻塞】

      import os
      
      os.system('pip3 show crawlab-sdk') # 查看版本
      # os.system('pip3 uninstall crawlab-sdk -y') # 卸载
      os.system('pip3 install crawlab-sdk==0.3.3 --force-reinstall') # 指定版本强制重新安装
posted @ 2022-09-21 12:37  eliwang  阅读(322)  评论(0编辑  收藏  举报