😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。
🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。
🌼 同时洲洲已经建立了程序员技术交流群,如果您感兴趣,可以私信我加入社群,可以直接vx联系(文末有名片)v:bdizztt
🖥 随时欢迎您跟我沟通,一起交流,一起成长、进步!点此也可获得联系方式~
本文目录
- 前言
- 一、使用os.system()
- 二、使用subprocess.run()
- 三、使用subprocess.Popen()
- 四、使用os.popen()
- 五、使用示例
- 注意事项
- 总结
前言
在Python开发过程中,我们经常需要执行一些Linux系统命令来完成特定的任务,如文件操作、系统状态检查等。
Python提供了多种方式来调用和执行系统命令,本文将介绍几种常见的方法,并提供相应的代码示例。
一、使用os.system()
os模块的system()函数是一个非常简单的方法来执行系统命令。它会执行指定的命令并等待命令执行完成。
示例代码
import os
# 执行简单的ls命令
result = os.system('ls -l')
print(f"命令执行结果: {result}")
二、使用subprocess.run()
subprocess模块提供了更强大的接口来执行外部命令。run()函数可以捕获命令的输出和错误信息。
示例代码:
import subprocess
# 执行命令并捕获输出
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(f"命令输出:\n{result.stdout}")
if result.stderr:
print(f"命令错误输出:\n{result.stderr}")
三、使用subprocess.Popen()
如果你需要更细粒度的控制,可以使用Popen。它允许你获取输出流、错误流,并且可以非阻塞地执行命令。
示例代码
import subprocess
# 使用Popen执行命令并实时获取输出
process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, text=True)
for line in process.stdout:
print(line, end='')
process.stdout.close()
process.wait()
四、使用os.popen()
os.popen()方法可以执行命令并返回一个文件对象,你可以像操作文件一样读取命令的输出。
示例代码
import os
# 使用os.popen执行命令并读取输出
with os.popen('ls -l') as command:
for line in command:
print(line, end='')
五、使用示例
使用模块 subprocess(Python文档中目前全力推荐),直接调用命令,返回值即是系统返回。shell=True表示命令最终在shell中运行。Python文档中出于安全考虑,不建议使用shell=True。
import os
import commands
print('=============================ls')
os.system('ls -al /')
print('=============================df')
df = os.popen('df -ah').read()
print(df)
print('===========================free')
a = commands.getoutput("free -mh")
print(a)
可以看到对应的输出结果为:
=============================ls
total 28
dr-xr-xr-x. 17 root root 244 Jan 24 12:11 .
dr-xr-xr-x. 17 root root 244 Jan 24 12:11 ..
-rw-r--r-- 1 root root 0 Jan 24 12:11 .autorelabel
lrwxrwxrwx. 1 root root 7 Jan 24 11:12 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jan 24 12:11 boot
drwxr-xr-x 19 root root 3320 Feb 1 09:29 dev
drwxr-xr-x. 138 root root 8192 Feb 1 09:29 etc
drwxr-xr-x. 2 root root 6 Nov 5 2016 home
lrwxrwxrwx. 1 root root 7 Jan 24 11:12 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jan 24 11:12 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Nov 5 2016 media
drwxr-xr-x. 3 root root 19 Jan 24 11:34 mnt
drwxr-xr-x. 4 root root 34 Jan 24 11:58 opt
dr-xr-xr-x 229 root root 0 Feb 1 09:29 proc
dr-xr-x---. 11 root root 4096 Feb 1 09:30 root
drwxr-xr-x 39 root root 1200 Feb 1 09:29 run
lrwxrwxrwx. 1 root root 8 Jan 24 11:12 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Nov 5 2016 srv
dr-xr-xr-x 13 root root 0 Feb 1 09:29 sys
drwxrwxrwt. 21 root root 4096 Feb 1 09:46 tmp
drwxr-xr-x. 13 root root 155 Jan 24 11:12 usr
drwxr-xr-x. 21 root root 4096 Jan 24 11:44 var
===================================df
Filesystem Size Used Avail Use% Mounted on
rootfs - - - - /
sysfs 0 0 0 - /sys
proc 0 0 0 - /proc
devtmpfs 1.9G 0 1.9G 0% /dev
securityfs 0 0 0 - /sys/kernel/security
tmpfs 1.9G 0 1.9G 0% /dev/shm
devpts 0 0 0 - /dev/pts
tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
cgroup 0 0 0 - /sys/fs/cgroup/systemd
pstore 0 0 0 - /sys/fs/pstore
cgroup 0 0 0 - /sys/fs/cgroup/pids
cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct
cgroup 0 0 0 - /sys/fs/cgroup/net_cls,net_prio
cgroup 0 0 0 - /sys/fs/cgroup/perf_event
cgroup 0 0 0 - /sys/fs/cgroup/freezer
cgroup 0 0 0 - /sys/fs/cgroup/memory
cgroup 0 0 0 - /sys/fs/cgroup/cpuset
cgroup 0 0 0 - /sys/fs/cgroup/hugetlb
cgroup 0 0 0 - /sys/fs/cgroup/blkio
cgroup 0 0 0 - /sys/fs/cgroup/devices
configfs 0 0 0 - /sys/kernel/config
/dev/sda6 70G 4.7G 66G 7% /
systemd-1 - - - - /proc/sys/fs/binfmt_misc
debugfs 0 0 0 - /sys/kernel/debug
mqueue 0 0 0 - /dev/mqueue
hugetlbfs 0 0 0 - /dev/hugepages
nfsd 0 0 0 - /proc/fs/nfsd
/dev/sr0 4.3G 4.3G 0 100% /mnt/cdrom
/dev/sda3 5.0G 33M 5.0G 1% /home
/dev/sda2 20G 164M 20G 1% /var
/dev/sda1 497M 128M 370M 26% /boot
sunrpc 0 0 0 - /var/lib/nfs/rpc_pipefs
tmpfs 378M 4.0K 378M 1% /run/user/0
binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc
========================================free
total used free shared buff/cache available
Mem: 3.7G 939M 1.8G 8.9M 1.0G 2.5G
Swap: 4.0G 0B 4.0G
注意事项
执行系统命令时,要注意安全问题,避免执行不安全的命令或注入攻击。
捕获命令的输出时,根据需要选择是否捕获标准错误输出。
在处理命令输出时,考虑到输出可能是二进制数据,根据需要选择合适的编码方式。
总结
📝Hello,各位看官老爷们好,我已经建立了CSDN技术交流群,如果你很感兴趣,可以私信我加入我的社群。
📝社群中不定时会有很多活动,例如每周都会包邮免费送一些技术书籍及精美礼品、学习资料分享、大厂面经分享、技术讨论谈等等。
📝社群方向很多,相关领域有Web全栈(前后端)、人工智能、机器学习、自媒体副业交流、前沿科技文章分享、论文精读等等。
📝不管你是多新手的小白,都欢迎你加入社群中讨论、聊天、分享,加速助力你成为下一个大佬!
📝想都是问题,做都是答案!行动起来吧!欢迎评论区or后台与我沟通交流,也欢迎您点击下方的链接直接加入到我的交流社群!~ 跳转链接社区~