subprocess中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)

運行結果如下:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章