我写的备份文件的程序里,通过os模块的system()方法调用了系统的rar.exe命令,这个方法会返回一个变量exit_status。
# 用winrar的rar命令压缩文件
zip_command = "rar a %s %s" %(target_dir + target_file, source)# 执行压缩打包命令
if os.system(zip_command)==0:
print('备份成功')
else:
print('备份失败')
那个程序还调用了wmic命令,并且在wmic命令的结果里查找字符串,这时候用的是os模块的 popen()方法,这个方法返回一个pipe对象,允许read或者write(但不允许同时读和写)。
# 确认PATH变量里是否有winrar目录
path_value = https://www.it610.com/article/os.popen('wmic ENVIRONMENT where "name=\'path\'" get VariableValue /value')
have_rar = path_value.read().find('WinRAR')
if have_rar == '-1':
print '请在系统PATH变量里设置WinRAR的路径'
sys.exit()
如果需要同时读写一个管道,可以用popen2(),这篇文档解释了popen()和popen2()的区别: http://linhs.blog.51cto.com/370259/126831 注:subprocess的Popen()方法就于替换os模块的popen()、popen2()、popen3()、popen4()等方法。官方文件的说明在这里:http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the-subprocess-module
备份数据库的程序里,用到了另一个方法,就是使用subprocess模块的call()方法来执行系统命令:
# 调用sqlcmd命令备份数据库
# os.system()不能正常执行backup_db_cmd命令,因为它没有正常处理sql_cmd里的空格。
subprocess.call(backup_db_cmd)
os.system("d:\tools\test.exe")没有问题,但是os.system( "D:\\Program Files\\Microsoft SQL Server\\90\\Tools\\Binn\\sqlcmd.exe")的时候就执行失败了,因为参数里含有空格,system()不能正常执行,这里的解决的方法是用subprocess.call()替换os.system()。 subprocess.call()本来就是用来代替os.system()的。
【python调用系统命令的方法】
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)