subprocess模块的使用注意
2024-08-31 22:01:39
subprocess.Popen()函数
语法格式:
subprocess.Popen(arg,stdin=None,stdout=None,stderr=None,shell=False)
1、主要来讲讲shell=True/False的区别
我们一般常用的格式:subprocess.Popen("cat test.txt", shell=True)
它相当于
subprocess.Popen(["/bin/sh", "-c", "cat test.txt"])
在unix下,当shell=False(默认)时,Popen使用os.execvp()来执行子程序。args一般要是一个【列表】。如果args是个字符串的
话,会被当做是可执行文件的路径,这样就不能传入任何参数了。
在unix下,当shell=True时,如果arg是个字符串,就使用shell来解释执行这个字符串。如果args是个列表,则第一项被视为命令,
其余的都视为是给shell本身的参数。也就是说,等效于:
subprocess.Popen(['/bin/sh', '-c', args[0], args[1], ...])
2、返回状态码问题
有两种方法:
第一个:
popen = subprocess.Popen('ls /usr/bin', stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True) print("out:",str(popen.stdout.read(),encoding='utf-8'))
popen.poll()
print(popen.returncode)
popen.poll()函数表示检查子进程是否已结束,设置并返回状态值,用默认的即可。returncode负责返回真正的结果,如果执行成功,返回值为0,否则为其他任意状态码都表示执行失败。
第二个:
returnstatuscode函数:
exitcode_curl,output_curl = subprocess.getstatusoutput(cmd_curl)
print("code1:%d\noutput1:%s" %(exitcode_curl,output_curl),file=doc)
上面的两种方法都可以实现在Linux、windows平台执行命令,并且获取命令的状态返回值。
最新文章
- 【转】《从入门到精通云服务器》第七讲—IAAS、PAAS、SAAS
- tzwhere模块 根据经纬度判断时区
- 【leetcode】Binary Tree Maximum Path Sum (medium)
- ORM原型概念
- Jedis 连接redis超时
- HDU Traffic Real Time Query System
- C++ 11 笔记 (四) : std::bind
- NIR相机
- java_Collection 类集
- ExtJs3常用控件操作实例
- hdu 1546 Idiomatic Phrases Game
- iOS进阶推荐的书目
- 浅析Content Negotation在Nancy的实现和使用
- linux下mount/unmount命令
- 搭建IIS并配置网站之旅
- CSRF攻击原理及防御
- MT【267】第一次很重要
- Proxy代理模式
- python程序打包成.exe
- jni4net使用小结
热门文章
- Nexus上传npm包
- [LeetCode] 334. Increasing Triplet Subsequence 递增三元子序列
- 【SSH进阶之路】Hibernate系列——总结篇(九)
- Ubuntu16.0.4安装OpenCV3.4.2
- DDD/CQRS模式,微服务,容器
- Idea打jar包(包含依赖的jar)
- webbench网站测压工具源码分析
- js中Function引用类型中一些常见且有用的方法和属性
- C++ Primer中文第四版
- vue中引入百度地图