您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

带有shell = True的python子进程:重定向和与平台无关的子进程终止

5b51 2022/1/14 8:21:22 python 字数 3146 阅读 478 来源 www.jb51.cc/python

我很难从python子进程模块中得到我想要的东西(它应该是一个统一的/独立于平台的抽象,afaik,但是不要让我开始那个:)).所以我所追求的简单事情如下.我想要>启动外部(stdio)应用程序(可能使用子进程),我使用shell样式重定向(如'./myapp> stdout_log> stderr_log')>基本上我想执行一个shell命令行

概述

我很难从python子进程模块中得到我想要的东西(它应该是一个统一的/独立于平台的抽象,afaik,但是不要让我开始那个:)).

所以我所追求的简单事情如下.我想要

>启动外部(stdio)应用程序(可能使用子进程),我使用shell样式重定向(如’./myapp> stdout_log> stderr_log’)

>基本上我想执行一个shell命令行,所以我必须为subprocess.Popen()指定shell = True(否则命令行中的重定向将不起作用)

>我想以异步方式启动此命令行(因此它作为一个独立的子进程运行,但我的python进程不会等待它的完成)
>(我的父python进程会不时查看子进程的日志以提取信息,但这与问题无关)
>如果我的父python进程决定,它应该能够终止这个子进程.

现在,我的主要问题是

>我基本上被迫使用shell = True,以使重定向工作
>在父python进程中处理子进程的stdout / stderr不是一个选项,因为我找不到以非等待方式执行它的功能(并且父进程必须做其他事情)
>如果我使用shell = True,那么subprocess.kill()将只终止shell而不是子进程
>我需要一个可靠的子进程终止方法,适用于任何平台(但至少Linux和Windows)

我希望我足够具体.感谢任何提示/提示 – 我只花了一整天的子流程,恕我直言,这是一个远离平台独立或简单的痛苦:((但也许只是我)

更新(2010-10-13):

如果你启动一个子进程(即使shell = False),那么subprocess.Popen.kill()函数只会杀死那个子进程(所以如果有任何“孙子”进程,它们将不会被终止. )

我读到了使用preexec_fn参数在所有子进程上设置sid,但它只是unix:timeout a subprocess

遗憾的是,我在子平台上的经验都在Windows平台上,它有很多自己的小怪癖.看起来,子进程有很多瑕疵,尽管它必须做一个好的工作,因为它应该取代popen,popen2等模块的存在.

总结

以上是编程之家为你收集整理的带有shell = True的python子进程:重定向和与平台无关的子进程终止全部内容,希望文章能够帮你解决带有shell = True的python子进程:重定向和与平台无关的子进程终止所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶