如何通过 Python 执行系统终端命令
Posted on Wed, 25 Dec 2024 16:10:20 +0800 by LiangMingJian
如何通过 Python 执行系统终端命令
需求
通过 Python 执行系统终端命令。
使用 subprocess 模块的 call 方法
使用 subprocess 模块中的 call 函数传递命令给 Linux Shell 系统。
>>> from subprocess import call
>>> call(["ls", "-l"])
使用 os 模块的 system 方法
system 方法会创建子进程来运行外部程序,因此只会返回外部程序的运行结果,这个方法适用于外部程序没有输出结果的情况。
>>> import os
>>> os.system("echo \"Hello World\"") # 直接使用 os.system 调用一个 echo 命令
Hello World # 打印结果
>>> val = os.system("ls -al | grep \"log\" ") # 使用 val 接收返回值
-rw-r--r-- 1 root root 6030829 Dec 31 15:14 log # 此时只打印了命令结果
>>> print(val)
0 # 注意,命令正常运行,返回值是 0
使用 os 模块的 popen 方法
popen 方法会创建管道来联通外部程序,当需要得到外部程序的输出结果时,可以调用 read 方法来读取输出内容。
>>> os.popen('ls -lt') # 调用 os.popen(cmd) 并不能得到我们想要的结果
<open file 'ls -lt ', mode 'r' at 0xb7585ee8>
>>> print(os.popen('ls -lt').read()) # 调用 read() 方法可以得到命令的结果
total 6064
-rwxr-xr-x 1 long long 23 Jan 5 21:00 hello.sh
-rw-r--r-- 1 long long 147 Jan 5 20:26 Makefile
drwxr-xr-x 3 long long 4096 Jan 2 19:37 test
-rw-r--r-- 1 root root 6030829 Dec 31 15:14 log
drwxr-xr-x 2 long long 4096 Dec 28 09:36 pip_build_long
drwx------ 2 Debian-gdm Debian-gdm 4096 Dec 23 19:08 pulse-gylJ5EL24GU9
drwx------ 2 long long 4096 Jan 1 1970 orbit-long
>>> val = os.popen('ls -lt').read() # 使用变量接收命令返回值