-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathexecute_cmd.py
49 lines (40 loc) · 2.03 KB
/
execute_cmd.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# @author Alu
import subprocess as sub
class CmdExecuter:
@classmethod
def execute(cls, cmd, print_statusoutput=True, stdin=None, input=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=True, encoding=None, errors=None):
def __single_cmd__(cmd, print_statusoutput=True, stdin=None, input=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=True, encoding=None, errors=None):
print("exec: ", cmd)
if cmd == "cmd":
print("cmd:", cmd)
return "执行cmd命令就会在windows上卡住, 强制退出了"
status, output = sub.getstatusoutput(cmd)
print("[status: %d] [output: %s]" % (status, output))
print("exec done!")
return status, output
def __multiple_cmds__(cmds, print_statusoutput=True, stdin=None, input=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=True, encoding=None, errors=None):
results = []
for c in cmds:
results.append(__single_cmd__(c))
return results
# 配置对命令执行函数的分派行为
dispatch_table = {
str: __single_cmd__,
list: __multiple_cmds__,
tuple: __multiple_cmds__,
}
if cmd is None or len(cmd) == 0:
raise ValueError("传入的命令为空")
for t, f in dispatch_table.items():
if isinstance(cmd, t):
return f (cmd, print_statusoutput=True, stdin=stdin, input=input,
stdout=stdout, stderr=stderr, shell=shell, cwd=cwd,\
timeout=timeout, check=check, encoding=encoding, errors=errors)
raise TypeError("传入的 cmd 变量类型非法")
if __name__ == '__main__':
print("multiple cmmands")
CmdExecuter.execute(["dir", "git status"])
print("single command")
CmdExecuter.execute("git commit")
# 尝试过的一些 windows 命令会导致阻塞, 如
# cmd 命令, winver 命令