如何通过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}")
- 返回CompletedProcess对象,其中包含有关命令执行的信息,如返回码、标准输出和标准错误输出。
-
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') # 指定版本强制重新安装
-