前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现调用并执行Linux系统命令

Python实现调用并执行Linux系统命令

作者头像
程序员洲洲
发布2024-06-09 13:46:41
1010
发布2024-06-09 13:46:41
举报
文章被收录于专栏:项目文章项目文章

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。

前言

在Python开发过程中,我们经常需要执行一些Linux系统命令来完成特定的任务,如文件操作、系统状态检查等。

Python提供了多种方式来调用和执行系统命令,本文将介绍几种常见的方法,并提供相应的代码示例。

一、使用os.system()

os模块的system()函数是一个非常简单的方法来执行系统命令。它会执行指定的命令并等待命令执行完成。

代码语言:javascript
复制
示例代码
import os

# 执行简单的ls命令
result = os.system('ls -l')
print(f"命令执行结果: {result}")

二、使用subprocess.run()

subprocess模块提供了更强大的接口来执行外部命令。run()函数可以捕获命令的输出和错误信息。

示例代码:

代码语言:javascript
复制
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。它允许你获取输出流、错误流,并且可以非阻塞地执行命令。

示例代码

代码语言:javascript
复制
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()方法可以执行命令并返回一个文件对象,你可以像操作文件一样读取命令的输出。

代码语言:javascript
复制
示例代码
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。

代码语言:javascript
复制
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)

可以看到对应的输出结果为:

代码语言:javascript
复制
=============================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全栈(前后端)、人工智能、机器学习、自媒体副业交流、前沿科技文章分享、论文精读等等。

📝不管你是多新手的小白,都欢迎你加入社群中讨论、聊天、分享,加速助力你成为下一个大佬!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、使用os.system()
  • 二、使用subprocess.run()
  • 三、使用subprocess.Popen()
  • 四、使用os.popen()
  • 五、使用示例
  • 注意事项
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档