subprocess模块 ==>> 用于执行系统命令

subprocess模块 ==>> 用于执行系统命令

# 简单命令call

import subprocess


# 简单命令call
subprocess.call("ls", shell=True)  # 执行系统命令
print(subprocess.check_call('ls', shell=True))  # 执行系统命令并获取返回值(执行状态吗),返回值为0则表示执行状态,否则为异常
print(subprocess.check_output('ls', shell=True))  # 执行系统命令,如果执行状态吗为0则返回执行结果,否则执行异常
# 参数shell:shell=True表示多行命令可以写在一起("ls -l");shell=False表示多行命名必须分开写("ls","-l")

# 复杂命令Popen

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


# 1、输入即可得到输出
# obj1 = subprocess.Popen("mkdir t3", shell=True, cwd='目录路径', )  # 新建文件夹并放到指定的目录

# 2、输入进行某环境,依赖再输入
obj2 = subprocess.Popen("python", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                        universal_newlines=True)  # 执行python命令,并设置输入、输出、错误、换行
obj2.stdin.write("print(1)\n")  # 将命令写入输出
obj2.stdin.write("print(2)")  # 将命令写入输出
obj2.stdin.close()  # 关闭输入

cmd_out = obj2.stdout.read()  # 输出输入的内容
obj2.stdout.close()  # 关闭输出
cmd_error = obj2.stderr.read()  # 错误时输出输入的内容
obj2.stderr.close()  # 关闭错误

print(cmd_out)  # 输出
print(cmd_error)  # 报错

# 与进程交互:将数据发送到stdin。 读取数据stdout和stderr,直到达到文件结尾。 等待过程终止。

import subprocess


# 与进程交互:将数据发送到stdin。 读取数据stdout和stderr,直到达到文件结尾。 等待过程终止。
# 1
obj3 = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                        universal_newlines=True)
obj3.stdin.write("print(1)\n")
obj3.stdin.write("print(2)")

out_error_list = obj3.communicate()
print(out_error_list)
# 2
obj4 = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                        universal_newlines=True)
out_error_list = obj4.communicate('print("hello")')
print(out_error_list)

  

posted @ 2017-03-30 11:11  Grisom  阅读(142)  评论(0编辑  收藏  举报