python subprocess模块的使用 --实现与系统的交互,获取执行命令行结果等作用(FTP项目中C/S交互)

Python调用系统命令:os.system与subprocess核心差异与实战避坑指南 在Python中执行系统命令是自动化、运维和集成开发的基础能力,其底层涉及进程创建、标准流管理、编码处理与安全控制等关键机制。`os.system()`作为早期兼容接口,仅返回退出码,无法捕获输出、缺乏超时控制且存在命令注入风险;而`subprocess`模块提供精细的进程生命周期管理、管道通信、跨平台编码支持(如`text=True`)及健壮错误处理(如`check=True`、`timeout`)。它支撑着CI/CD脚本、爬虫环境启动、FFmpeg音视频处理、Docker容器内命令调用等典型工程场景。本 阅读详情

1subprocess模块允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等。(使用这个模块之前先导入import subprocess).

2调用subprocess.run(...)是推荐的常用方法,在大多数情况下能满足需求,但如果你可能需要进行一些复杂的与系统的交互的话,用subprocess.Popen()

 

常用subprocess方法示例

#执行命令,返回命令执行状态 , 0 or 非0
>>> retcode = subprocess.call(["ls", "-l"])

#执行命令,如果命令结果为0,就正常返回,否则抛异常
>>> subprocess.check_call(["ls", "-l"])
0

#接收字符串格式命令,返回元组形式,第1个元素是执行状态,第2个是命令结果
>>> subprocess.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')

#接收字符串格式命令,并返回结果
>>> subprocess.getoutput('ls /bin/ls')
'/bin/ls'

#执行命令,并返回结果,注意是返回结果,不是打印,下例结果返回给res
>>> res=subprocess.check_output(['ls','-l'])
>>> res
b'total 0\ndrwxr-xr-x 12 alex staff 408 Nov 2 11:05 OldBoyCRM\n'

#上面那些方法,底层都是封装的subprocess.Popen
poll()
Check if child process has terminated. Returns returncode

wait()
Wait for child process to terminate. Returns returncode attribute.


terminate() 杀掉所启动进程
communicate() 等待任务结束

stdin 标准输入

stdout 标准输出

stderr 标准错误

pid
The process ID of the child process.

#例子
>>> p = subprocess.Popen("df -h|grep disk",stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True)
>>> p.stdout.read()
b'/dev/disk1 465Gi 64Gi 400Gi 14% 16901472 104938142 14% /\n'

 

 

 

1

2

3

4

5

6

7

8

9

10

11

>>> subprocess.run(["ls", "-l"])  # doesn't capture output

CompletedProcess(args=['ls', '-l'], returncode=0)

 

>>> subprocess.run("exit 1", shell=True, check=True)

Traceback (most recent call last):

  ...

subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

 

>>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)

CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,

stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n')

 

调用subprocess.run(...)是推荐的常用方法,在大多数情况下能满足需求,但如果你可能需要进行一些复杂的与系统的交互的话,你还可以用subprocess.Popen(),语法如下:

1

2

p = subprocess.Popen("find / -size +1000000 -exec ls -shl {} \;",shell=True,stdout=subprocess.PIPE)

print(p.stdout.read())

可用参数:

    • args:shell命令,可以是字符串或者序列类型(如:list,元组)
    • bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
    • stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
    • preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
    • close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
      所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
    • shell:同上
    • cwd:用于设置子进程的当前目录
    • env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
    • universal_newlines:不同系统的换行符不同,True -> 同意使用 \n
    • startupinfo与createionflags只在windows下有效
      将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

终端输入的命令分为两种:

  • 输入即可得到输出,如:ifconfig
  • 输入进行某环境,依赖再输入,如:python

实例1:FTP项目中获取终端命令行结果:(C/S交互)

 import subprocess

cmd_obj = subprocess.Popen('dir %s' %self.user_current_dir,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
stdout = cmd_obj.stdout.read()
stderr = cmd_obj.stderr.read()

cmd_result = stdout + stderr # 命令结果的信息

if not  cmd_result:
    cmd_result = b'current dir has no file at all.'

self.send_response(302,cmd_result_size=len(cmd_result)) # 发送消息头
self.request.sendall(cmd_result)

2:获取执行操作命令后的结果:

bb = subprocess.run('ipconfig', stdout=subprocess.PIPE)

print(bb.stdout.decode('gbk'))    ======> 执行结果就保存在stdout这个变量中

 

 

需要交互的命令示例

1

2

3

4

5

6

7

8

9

10

import subprocess

 

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

obj.stdin.write('print 1 \n ')

obj.stdin.write('print 2 \n ')

obj.stdin.write('print 3 \n ')

obj.stdin.write('print 4 \n ')

 

out_error_list = obj.communicate(timeout=10)

print out_error_list

subprocess实现sudo 自动输入密码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import subprocess

 

def mypass():

    mypass = '123' #or get the password from anywhere

    return mypass

 

echo = subprocess.Popen(['echo',mypass()],

                        stdout=subprocess.PIPE,

                        )

 

sudo = subprocess.Popen(['sudo','-S','iptables','-L'],

                        stdin=echo.stdout,

                        stdout=subprocess.PIPE,

                        )

 

end_of_pipe = sudo.stdout

 

print "Password ok \n Iptables Chains %s" % end_of_pipe.read()

Socket通信原理与远程控制木马技术剖析:从C/S模型到攻防实战 网络通信是计算机系统互联的基础,其核心机制之一便是Socket编程,它作为进程间通信的基石,通过TCP/IP协议栈实现可靠的数据传输。理解Socket的工作原理,包括三次握手、数据流封装与端口绑定,是掌握网络编程与安全防御的关键。在工程实践中,Socket技术支撑着从Web服务到即时通讯的广泛应用,但其底层通信模型也常被用于构建远程控制通道,例如在客户端/服务器(C/S)架构中实现指令与数据的交换。这种技术一旦被恶意利用,便可形成远程控制木马,通过反弹连接、协议伪装等手段穿透防火墙,实现对目标系统的隐蔽操控 阅读详情

相关推荐

Python与Bash实现反弹Shell:原理、实战与安全防御

在网络通信与系统管理中,反向连接是一种关键的通信模型,它通过让受控端主动发起连接来绕过防火墙限制,广泛应用于渗透测试与系统管理。其核心原理在于文件描述符的重定向,将标准输入、输出和错误流绑定到网络套接字,从而实现远程交互式Shell会话。从技术价值看,掌握反弹Shell有助于深入理解进程控制、网络协议及系统安全机制。在应用场景上,它不仅是安全测试中权限维持的常用技术,也是运维人员诊断网络策略、理解服务通信的实践案例。本文聚焦于使用Python和Bash这两种广泛可用的工具,详细拆解其实现方法,涵盖从基础Ne

weixin_30598225的博客 420

Python编程:subprocess执行命令行命令

Python,subprocess执行命令行命令

eli的博客 2791

Python端口检查七法:从socket到异步扫描与nmap实战

网络连通性检查是运维、开发和测试中的基础技能,其核心在于验证TCP/IP协议栈中端口的可达性。通过尝试建立TCP连接,可以诊断服务间通信、防火墙规则及网络配置问题。掌握高效的端口探测技术,能显著提升自动化部署、微服务调试和系统监控的可靠性。在Python生态中,从标准库的socket、asyncio到专业工具nmap,提供了多种实现方案,尤其适合集成到CI/CD流水线或批量扫描场景。本文基于socket连接和异步并发等热词,系统梳理七种主流方法,帮助开发者根据性能需求、功能深度和部署环境,选择最合适的端口检

weixin_33701294的博客 358

Python Subprocess模块

我们使用subprocess.run()函数来执行zip命令,并使用-r参数来递归地压缩文件,将file1.txt和file2.txt压缩为archive.zip。使用unzip命令可以解压文件,如果我们想要排除某个文件夹,可以在压缩命令中使用-x参数来指定要排除的文件夹。你可以使用concurrent.futures.ProcessPoolExecutor来并行执行多个命令,从而提高程序的性能。在这个例子中,我们使用subprocess.run()函数来执行ls -l命令,并捕获其输出。

mywpython的博客 1306

Mac系统Python版本升级与多版本管理指南

Python作为现代软件开发的核心语言,版本管理是开发者必须掌握的基础技能。在Mac系统上,由于系统自带的Python版本较旧且与系统功能深度耦合,安全升级Python需要特殊处理。通过包管理工具Homebrew或版本管理工具pyenv,开发者可以实现Python多版本共存与灵活切换,满足不同项目的环境需求。虚拟环境技术进一步隔离了项目依赖,解决了包冲突问题。这些方法不仅适用于Python开发,也是现代软件开发环境配置的通用实践,特别适合需要处理多版本兼容性的数据科学和Web开发场景。

weixin_30735745的博客 379

Python ctypes缓冲区溢出漏洞CVE-2021-3177深度剖析与实战复现

缓冲区溢出是软件安全领域的经典漏洞类型,其原理在于程序向固定大小的内存缓冲区写入超出其容量的数据,导致相邻内存区域被覆盖。这种内存破坏可能引发程序崩溃、数据泄露,甚至被攻击者利用来执行任意代码,对系统安全构成严重威胁。在Python生态中,ctypes模块作为连接Python与C语言库的桥梁,虽然提供了强大的互操作性,但也引入了潜在的内存安全风险。CVE-2021-3177正是一个典型的案例,它源于ctypes模块在处理特定浮点数转换时,其内部字符串格式化函数存在栈缓冲区溢出缺陷。攻击者可通过精心构造的浮点

weixin_30825581的博客 449

subprocess运行多条命令

【代码】subprocess运行多条命令。

2302_79067179的博客 955

Linux Shell RCE绕过技巧:从命令注入到交互式Shell获取实战

远程命令执行(RCE)是Web安全中常见的高危漏洞,攻击者通过注入恶意命令获取服务器控制权。其原理在于应用程序未对用户输入进行充分过滤,将输入直接拼接至系统命令中执行。从防御视角看,这凸显了输入验证与最小权限原则的重要性。在渗透测试与红队评估中,掌握RCE绕过技巧能有效验证漏洞的实际危害,将理论风险转化为可控的测试成果。实际应用场景包括但不限于:通过**命令与关键字绕过**突破WAF过滤,利用**无回显(Blind)RCE**的数据外带技术获取执行结果,以及在受限Shell环境下获取稳定的交互式会话。这些技

weixin_34302798的博客 712

python:subprocess模块连续执行多条cmd命令

使用python的subprocess模块,在一个子进程下连续执行多条cmd命令。

Xiao_Niren的博客 1万+

CentOS 8 Python环境隔离实战:源码/pyenv/conda三路径详解

Python环境隔离是Linux系统工程中的基础安全实践,其核心在于避免污染系统级Python解释器与依赖链。原理上,CentOS 8的/usr/bin/python3被dnf、firewall-cmd等关键服务深度绑定,替换将导致包管理器崩溃与系统功能异常。技术价值体现在稳定性保障、多版本共存、ABI兼容性控制及生产环境可重现性。典型应用场景包括AI模型部署(需conda create -n pytorch_env python=3.9)、跨项目开发(依赖pyenv local版本切换)以及金融级合规运维

weixin_30268071的博客 347

GNSS数据获取全攻略:从原理到实战技巧

全球导航卫星系统(GNSS)是现代空间地理信息技术的基石,其工作原理是通过多颗卫星发射信号,地面接收机通过计算信号传播时间差实现精确定位。在测绘、导航、气象等领域,高质量的GNSS数据直接影响作业精度与效率。RINEX作为标准数据格式,需要专业工具处理,而不同应用场景对数据精度要求差异显著——地震监测需要高频原始数据,普通定位服务则使用广播星历即可。实际工程中,数据获取面临三大挑战:分散的数据源(如IGS、EPN等国际平台)、复杂的格式转换(如CGCS2000坐标系统)以及严苛的质量控制(需验证数据完整率、

488

python中多线程运行shell cmd,并且管理线程执行进度

python3,多线程,shell cmd,管理线程

weixin_44517278的博客 1698

实战指南:10种编程语言在rbash逃逸中的高效利用

在Linux系统安全与权限管理中,受限Shell(rbash)是一种常见的访问控制机制,它通过限制命令执行、目录切换和环境变量修改来约束用户权限。其核心原理在于利用Bash的受限模式,构建一个最小权限执行环境。从技术价值看,理解rbash的绕过技术不仅有助于渗透测试人员评估系统安全性,也能帮助系统管理员识别和加固防御薄弱点。在实际的渗透测试和红队评估中,rbash逃逸是获取更高权限、进行横向移动的关键突破口。应用场景广泛存在于CTF竞赛、内网渗透测试以及系统安全审计中。本文聚焦于如何利用Python、Per

weixin_33725807的博客 287

Python执行系统命令全解析:从os.system到subprocess实战指南

在自动化运维和系统管理中,进程间通信是关键技术之一,它允许程序调用外部命令并获取结果。其核心原理是通过操作系统提供的接口创建子进程,并建立标准输入、输出和错误流的管道进行数据交换。这项技术的价值在于打通高级编程语言与底层系统操作之间的壁垒,实现批量文件处理、系统状态监控和自动化部署等任务。Python通过内置的os和subprocess模块提供了完整的解决方案,其中subprocess模块因其强大的功能和安全性成为当前官方推荐的选择。本文聚焦Python执行CMD命令的实战应用,深入解析subprocess

weixin_34218579的博客 378

在python 中实现运行多条shell命令

今天小编就为大家分享一篇在python 中实现运行多条shell命令,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Opencv4.5.1 微信二维码识别功能 QRCode 编译与使用 C++

部分参考:https://mp.weixin.qq.com/s/2GZAJAUPHTXFOKDRv-D21Q 一、下载源码 https://github.com/opencv 二、源码编译 ① 在cmake中添加源码编译路径和生成路径,第一次点击configure。 ② 添加contrib路径 第一次configure后,找到OPENCV_EXTRA_MODULES_PATH,将contrib路径添加进来,注意要具体到modules/,继续configure。 ..

zaibeijixing的专栏 1万+

Python 学习 ---> 模块、pypi ( 模块库 )、添加模块路径

什么是 模块 在 Python 中,一个.py文件就是一个模块(Module)。模块的名字就是文件的名字。在模块内部,通过全局变量__name__可以获取模块名(即字符串) 模块作用 为了实现代码的复用,通常会把一些其他程序中重用的代码拿出来单独放在一个程序文件中,

freeking101的博客 3480

华为网络实战:5分钟搞定OSPF+VRRP+MSTP多协议联动配置(附完整命令集)

本文深入解析了在企业网络中如何高效协同部署OSPF、VRRP和MSTP三大协议。通过一个典型的双核心网络案例,详细阐述了从规划、配置到验证的完整流程,重点强调了确保MSTP根桥与VRRP主设备一致的设计原则,以实现最优的二层与三层流量转发路径,并提供了完整的命令集和故障排查思路。

weixin_29251337的博客 153

python标准库、threading、multiprocessing、aiomultiprocess、进程/线程 同步、queue(队列)

multiprocessing 包提供了本地和远程并发操作,通过使用子进程而非线程有效地绕过了全局解释器锁。 因此,multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。

freeking101的博客 2万+

MFC工具栏增加EditBox和Button

1. 在资源视图中增加EditBox, Button控件,ID分别为ID_EDIT_SEED, ID_BTN_SEED 2. 在CMainFrame中增加成员变量 CMFCToolBarEditBoxButton *m_editSeed; CMFCToolBarButton *m_btnSeed; 3. 在CMainFrame::OnCreate中创建控件 m_editSeed = new CMFCToolBarEditBoxButton(ID_EDIT_SEED, GetCmdMgr()-&.

学习是为了探索这个世界的本质 802

windows 应用爬虫: exe自动操作

之前写了那么多关于手机和网页爬取,今天就写一期关于exe的爬取,exe的爬取其实也是类似的,一个方式是抓包,还有一个模拟人工界面获取元素数据。抓包肯定是最直接,数据也是最全的, 有些数据不一定会显示在界面上,或者必须通过一定交付方式,才能显示到页面(比如移动鼠标到具体元素上)。本文依旧采用python方式,先说说怎么通过界面方式驱动应用点击和数据获取。

youbingchen的博客 888

如何用ncbi-genome-download高效获取NCBI基因组数据?生物信息学工作者的终极指南

在生物信息学研究中,NCBI基因组数据下载是每个研究者必须面对的基础任务。我们常常需要在海量数据中精准定位、批量获取特定生物的基因组信息,传统的手动下载方式不仅耗时耗力,还容易出错。实际上,**ncbi-genome-download**正是为解决这一痛点而生的专业工具,它通过简洁的命令行接口,实现了对NCBI FTP服务器中细菌、真菌、病毒等多种生物基因组数据的高效批量下载。 ## 传统痛点v

gitblog_01181的博客 438

OpenClaw进行安全测试(附使用场景案例)

test-master 是一个全面的测试专家,覆盖功能测试、性能测试、安全测试三大领域。这里我们重点来看下使用test-master如何进行安全测试。使用 test-master 时,可以针对以下高频领域进行专项安全扫描:✅ OWASP Top 10 测试✅ SQL 注入测试✅ XSS 测试✅ CSRF 测试✅ 认证 / 授权测试。

十二测试录 330
上一篇: 常用代码hashlib模块 --加密代码的使用
下一篇: python-shelve模块详解-------可以用类似字典的形式持久化存储
Python_bh
博客等级 码龄7年 11粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值