使用python脚本执行和终止shell进程

2024-09-24 22:20:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要通过python脚本或python程序运行“myexe”可执行文件:

./myexe arg1 arg2 >& outfile

我的方法如下:

^{pr2}$

这里我注意到,当我使用io重定向时,系统命令打印的进程id(第10行)与else部分打印的进程id(第14行)不同。在

如果我将命令用作“./myexe arg1 arg2”,那么进程id的值是正确的。 那么,如何将subprocess与shell命令一起使用呢?shell命令也使用io重定向?在

这里重定向用于同一文件中的stderr和stdout。在

请帮助我解决这个问题,并分享实现这一目标的有效方法。 另外,如果在任意延迟之后没有使用某种有效的方法结束(终止)进程id-x呢?在

除此之外,我最后怎么知道进程是成功终止还是发送终止信号: 我按如下方式进行:

if proc.wait() == 0:
   print 'Terminate successfully'
else:
   print 'Terminated by kill signal'

或者在调用后设置一些标志杀戮()也可以使用。在

它是否符合python规则/预期用途?在

注: 为了避免myexe可执行文件中可能出现的无限循环场景,需要终止该进程。 outfile由python脚本进一步读取(此处未显示)。在


Tags: 方法io命令脚本id可执行文件进程shell
1条回答
网友
1楼 · 发布于 2024-09-24 22:20:26

由于shell=True参数,您的pid不同。Python产生一个中间shell进程。在

流程树如下所示:

python yourscript.py 
└─ /bin/sh -c ./myexe        # PID shown on line 14
   └─ ./myexe                # PID shown on line 10

将第6行替换为沿着这两条线的内容

^{pr2}$

并且您的pid将匹配,而两个流都将被重定向到同一个文件(确保./myexe刷新这些流)。在

如果您想使用shell,应该参考这个问题:How to terminate a python subprocess launched with shell=True。在

相关问题 更多 >