我很难从python子进程模块中获得我想要的东西(应该是统一/平台无关的抽象,afaik,但不要让我开始吧:))。python subprocess with shell = True:重定向和平台无关的子进程查杀
所以我简单的事情是以下。我想
- 启动外部(标准输入输出)应用程序(可能具有子过程),其中,我使用壳式重定向(如“./myapp> stdout_log> stderr_log”)
- 基本上我想执行shell命令行,所以我必须指定壳=真为subprocess.Popen()(或者在命令行重定向将不会工作)
- 我想发动这个命令行以异步的方式(所以它作为一个独立的子进程运行,但我的python proc ess不会等待它完成)
- (我的父级python进程会不时地查看子进程的日志以提取信息,但这与问题无关)
- 如果我的父级python进程决定,它应该能够终止这个子进程。
现在,我的主要问题是
- 我基本上被迫使用壳=真,得到重定向工作
- 父蟒蛇处理孩子的标准输出/标准错误进程不是一个选项,因为我找不到以非等待方式执行的功能(并且父级python进程必须在孩子运行时做其他事情)
- 如果我使用壳=真然后subprocess.kill()将只终止
- 我需要的是在任何平台上工作的可靠的子进程的终止方法(但至少Linux和Windows)
我希望我足够具体。感谢提前任何提示/提示 - 我只是花了一整天的子过程,恕我直言它是
痛苦
远离平台无关或简单:(但也许它只是我)
更新(2010年-10-13):
如果启动一个子进程(即使外壳= FALSE),那么subprocess.Popen.kill()函数将只杀死子进程(所以,如果有任何“孙子“流程,他们不会被终止)
我读到有关使用preexec_fn参数设置所有的子进程的SID,但它仅限Unix:timeout a subprocess
相关:[如何终止与shell = True启动的python子进程](http://stackoverflow.com/q/4789837/95735) – 2012-10-18 23:11:15