subprocess中shell=False时执行多条命令

大家都知道python中需要执行shell命令时,有shell=True和shell=False两种方式。但是shell=True的方式不安全,为了保证安全性,一般使用shell=False的方式。shell=False的方式虽然安全,但它一次只能执行一个命令,有管道符号的命令需要拆分成多个命令分别执行,这里写了一个执行多条命令的方法将执行多条命令的操作封装起来,只需要传入需要执行的命令,就能返回需要的结果,代码如下:

import shlex
import subprocess
from subprocess import PIPE

def multiple_cmd_exec(cmds):
	print("Enter multiple_cmd_exec")
	process_list = []
	try:
		for index, cmd in enumerate(cmds):
			if index == 0:
				_p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
			else:
				_p = subprocess.Popen(cmd, stdin=process_list[index-1].stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
			process_list.append(_p)
		out, err = process_list[-1].communicate()
		if process_list[-1].returncode == 0:
			print("multiple_cmd_exec success:\n{}".format(out.decode()))
		else:
			print("multiple_cmd_exec err:\n{}".format(err.decode()))
                
		return out.decode()
	except Exception as error:
		print(error)

def change_cmds_format(args):
	print("Enter change_cmds_format")
	cmds = []
	result = []
	if '|' in args:
		cmds = args.split('|')
	else:
		cmds.append(args)
	for cmd in cmds:
		cmd = shlex.split(cmd)
		result.append(cmd)
	print(result)
	
	return result
	
cmd = "netstat -ant | awk '{print $6}' | sort|uniq -c|sort -rn"
cmds = change_cmds_format(cmd)
ret = multiple_cmd_exec(cmds)
print(ret)

运行结果如下:

 

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值