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中 subprocess shell=False 与shell=True的区别
- 如何结束一个python启动的shell子进程(How to terminate a python subprocess launched with shell=True)
- Python subprocess shell 丢失环境变量
- Python subprocess shell 编程规范
- Python subprocess,Linux下执行shell命令
- 利用python执行shell脚本 并动态传参 及subprocess基本使用
- python3 获得shell的输出内容(subprocess.getstatusoutput)
- subprocess shell=True的测试
- Python subprocess shell 编程规范
- Python subprocess执行持续输出shell命令的控制
- windows上subprocess.Popen的参数close_fds=True与stdin/stdout/stderr不能共存
- Python执行shell脚本的几种方式(最好用subprocess.Popen来替代os.system)
- windows下python subprocess.Popen执行adb 命令进程无法终止
- 解决大量调用Python subprocess.Popen产生的一些bug
- python中subprocess.Popen.poll
- shell调用python脚本,并且向python脚本传递参数
- python subprocess阻塞
- python中subprocess与pipe管道
- python 使用 subprocess.Popen() 调用子进程
- python3之xml&ConfigParser&hashlib&Subprocess&logging模块