2023年8月1日发(作者:)
subprocess的popen函数subprocess的进程创建和管理由Popen类处理。原型:(原型中参数带有的值都是默认值)(原型中参数带有的值都是默认值)class
(args,
bufsize=-1,
executable=None,
stdin=None,
stdout=None,
stderr=None,
preexec_fn=None,
close_fds=True,
shell=False,
cwd=None,
env=None,
universal_newlines=None,
startupinfo=None,
creationflags=0,
restore_signals=True,
start_new_session=False,
pass_fds=(),
*,
group=None,
extra_groups=None,
user=None,
umask=-1,
encoding=None,
errors=None,
text=None)args参数:⼀个需要运⾏的参数序列;默认情况下,如果args是序列,则运⾏的程序是这个序列中的第⼀项,⽐如[“python”,“--args参数:version”],运⾏的cmd就是这个列表中的第⼀项python;但是如果args是字符串,具体如何实现依赖于具体平台。如果在Windows上
shell 为 False 并且序列包含字节串和路径类对象则
args 形参可以接受⼀个 path-like object。参数 参数
shell (默认为 False)指定是否使⽤ shell 执⾏程序。如果
shell 为 True,更推荐将
args 作为字符串传递⽽⾮序列。如果 作为字符串传递⽽⾮序列。args 是⼀个字符串,则字符串的格式必须和在命令⾏中所输出的完全相同。在 Windows,使⽤ shell=True,环境变量 COMSPEC 指定了默认 shell。在 Windows 唯⼀需要指定 shell=True 的情况是想要执⾏内置在 shell 中的命令(例如 dirdir 或者 copycopy)。在运⾏⼀个批处理⽂件或者基于控制台的可执⾏⽂件时,不需要 shell=True。def cmd_run(cmd): print("the cmd is {}".format(cmd)) subproc = (cmd, stdin=, stdout=, stderr=,universal_newlines=True, creationflags=_NEW_PROCESS_GROUP,shell=Trueshell=True) #设置shell为true while True: out = ne() if out: print(out) else: breakcmd_run("dir")输出:windows上运⾏dir如果没有设置shell为True,则在windows上⽆法运⾏这个cmd。executable 参数指定⼀个要执⾏的替换程序,⽐较少⽤到这个参数。当 shell=True, 参数executable 替换
args 指定运⾏的程序。但是,原始的
args 仍然被传递给程序。在 3.6 版更改: 在POSIX 上
executable 形参可以接受⼀个 path-like object。在 3.8 版更改: 在Windows 上
executable 形参可以接受⼀个字节串和 path-like object。stdin,
stdout 和
stderr 分别指定被运⾏的程序的标准输⼊、输出和标准错误的⽂件句柄。合法的值有 PIPE , DEVNULL , ⼀个存在的⽂件描述符(⼀个正整数),⼀个存在的 ⽂件对象 以及 None。 PIPE 表⽰应创建⼀个新的对⼦进程的管道。 DEVNULL 表⽰使⽤特殊的 l ⽂件。使⽤默认的 None,则不进⾏成定向;⼦进程的⽂件流将继承⾃⽗进程。另外,
stderr 可设为 STDOUT,表⽰应⽤程序的标准错误数据应和标准输出⼀同捕获。如果
close_fds 为真,所有⽂件描述符除了 0, 1, 2 之外都会在⼦进程执⾏前关闭。⽽当 为真close_fds 为假时,⽂件描述符遵守它们继承的标志如 ⽂件描述符的继承 所述。在 Windows,如果
close_fds 为真, 则⼦进程不会继承任何句柄,除⾮在 ibuteList 的
handle_list的键中显式传递,或者通过标准句柄重定向传递。如果
cwd 不为 None,此函数在执⾏⼦进程前会将当前⼯作⽬录改为
cwd。
cwd 可以是⼀个字符串、字节串或 路径类对象 。 特别地,当可执⾏⽂件的路径为相对路径时,此函数会相对于*cwd* 来查找
executable (或
args 中的第⼀个条⽬)。在 3.6 版更改: 在 POSIX 上
cwd 形参接受⼀个 path-like object。在 3.7 版更改: 在 Windows 上
cwd 形参接受⼀个 path-like object。在 3.8 版更改: 在 Windows 上
cwd 形参接受⼀个字节串对象。如果
encoding 或
errors 被指定,或者
text 为 true,则⽂件对象
stdin,
stdout 和
stderr 将会以指定的编码和
errors 以⽂本模式打开,如同 本模式打开常⽤参数 所述。
universal_newlines 参数等同于 参数text 并且提供向后兼容性。默认情况下,⽂件对象都以⼆进制模式打开。如果给出,
startupinfo 将是⼀个将被传递给底层的 CreateProcess 函数的 STARTUPINFO 对象。creationflags,如果给出,可以是⼀个或多个以下标志之⼀:CREATE_NEW_CONSOLECREATE_NEW_PROCESS_GROUPABOVE_NORMAL_PRIORITY_CLASSBELOW_NORMAL_PRIORITY_CLASSHIGH_PRIORITY_CLASSIDLE_PRIORITY_CLASSNORMAL_PRIORITY_CLASSREALTIME_PRIORITY_CLASSCREATE_NO_WINDOWDETACHED_PROCESSCREATE_DEFAULT_ERROR_MODECREATE_BREAKAWAY_FROM_JOBPopen 对象⽀持通过 with 语句作为上下⽂管理器,在退出时关闭⽂件描述符并等待进程:。在 3.6 版更改: 现在,如果 Popen 析构时⼦进程仍然在运⾏,则析构器会发送⼀个 ResourceWarning 警告。在 3.8 版更改: 在某些情况下 Popen 可以使⽤ _spawn() 以获得更好的性能。在适⽤于 Linux 的 Windows ⼦系统和 QEMU ⽤户模拟器上,使⽤ _spawn() 的 Popen 构造器不再会因找不到程序等错误⽽引发异常,⽽是上下级进程失败并返回⼀个⾮零的 returncode。异常在⼦进程中抛出的异常,在新的进程开始执⾏前,将会被再次在⽗进程中抛出。最常见的被抛出异常是 OSError。例如,当尝试执⾏⼀个不存在的⽂件时就会发⽣。应⽤程序需要为 OSError 异常做好保护。如果 Popen 调⽤时有⽆效的参数,则⼀个 ValueError 将被抛出。 将被抛出check_all() 与 check_output() 在调⽤的进程返回⾮零退出码时将抛出 抛出 CalledProcessError。所有接受
timeout 形参的函数与⽅法,例如 call() 和 icate() 将会在进程退出前超时到期时抛出 抛出 TimeoutExpired。此模块中定义的异常都继承⾃ SubprocessError。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690876349a452720.html
评论列表(0条)