Python中subprocess 模块 创建并运行一个进程
2017-03-06 22:36
295 查看
python的subprocess模块,看到官方声明里说要尽力避免使用shell=True这个参数,于是测试了一下:
from subprocess import call import shlex cmd = "cat test.txt; rm test.txt" call(cmd, shell=True) 运行之后: 1:打开并浏览了test.txt文件 2:删除了test.txt文件 from subprocess import call import shlex cmd = "cat test.txt; rm test.txt" cmd = shlex(cmd) call(cmd, shell=False) 运行之后: 1:尝试打开名为text.txt;的文件 2:尝试打开名为rm的文件 3:打开并浏览了test.txt文件 shell=True参数会让subprocess.call接受字符串类型的变量作为命令,并调用shell去执行这个字符串,第一个测试中的分号被认为是shell命令中的分隔符,执行了cat和rm两个命令。 当shell=False是,subprocess.call只接受数组变量作为命令,并将数组的第一个元素作为命令,剩下的全部作为该命令的参数,因此第二个测试只执行了cat命令,并试着打开了作为参数的”text.txt;”,”rm” , “text.txt”三个文件。 毫无疑问shell=False的参数能让你的程序更加安全,尤其是当你的cmd变量值是从外部读取到的时候。 假设你有这样的一个需求:让程序运行cat命令,cat的参数则是从一个文件里读取,那代码可能是这样子的 from subprocess import call param = file.readline() call(cat + param, shell = True) 一旦当param读取到了”a.txt; rm -rf /;b.txt”之类的字符串时,后果时毁灭性的…… from subprocess import call import shlex param = file.readline() param = "cat " + param param = shlex(param) call(param, shell = False) 显然是更好的选择。
相关文章推荐
- Python模块学习 ---- subprocess 创建子进程
- Python模块学习 ---- subprocess 创建子进程
- [转载]Python模块学习 ---- subprocess 创建子进程
- Python模块学习 ---- subprocess 创建子进程
- Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件
- Python模块学习 ---- subprocess 创建子进程
- 最全Pycharm教程(9)——创建并运行一个基本的Python测试程序
- (转)Python模块学习 ---- subprocess 创建子进程
- Python——创建一个模块
- Python模块学习 ---- subprocess 创建子进程
- python-subprocess创建附加进程
- python实现在每个独立进程中运行一个函数的方法
- (推荐读)Python模块学习--创建子进程_想想再定_百度空间
- python的Popen的一个坑,创建后不自动开始运行
- Python 创建子进程模块subprocess详解
- 转:Python模块学习 ---- subprocess 创建子进程
- C# 创建互斥进程(程序只能运行一个实例)
- Python模块学习 ---- subprocess 创建子进程
- docker如何创建一个运行后台进程的容器并同时提供shell终端
- 深入分析在Python模块顶层运行的代码引起的一个Bug