您的位置:首页 > 运维架构 > Shell

python subprocess参数shell=True踩到的坑

2018-01-02 20:59 232 查看

0x01 问题现象

写的程序使用subprocess创建子进程运行其他程序,判断其他程序运行完后进行处理。

在subprocess使用了shell=True,判断用户程序退出的代码如下

while self.proc.poll() is None:
do_something


判断子进程是否运行结束,程序在子进程运行结束后,代码未向下继续运行,而是卡在了这个循环中。

0x02 原因分析

百度后对shell参数的解释如下:

shell=True参数会让subprocess.Popen接受字符串类型的变量作为命令,并调用shell去执行这个字符串,当shell=False是,subprocess.Popen只接受数组变量作为命令,并将数组的第一个元素作为命令,剩下的全部作为该命令的参数。

通过查看服务器进程可以看到,仍然有进程存在,进程如下



为shell中运行的程序,由此可以得出,shell=true时,子进程在运行完后,shell并没有退出,而是卡在shell命令中,可由进程看到。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python