OS模块的补充使用---执行终端命令
Python基础至os模块
- 由于近期的项目需要用到对应的终端命令去调用其他程序,因此温习一下os.system()函数;
- 参考文献:
https://zhuanlan.zhihu.com/p/51716674
- 参考文献:
https://www.cnblogs.com/MrRead/p/7832786.html
1.os.system()
- 错误用法
- os.system(""),该方法不具备连续性,属于子进程,因此每次使用都是重新开是
# -*- coding: utf-8 -*-
'''
@Time : 2021/11/17 10:07
@Author : ziqingbaojian
@File : 终端命令.py
'''
import os
os.system("cd ..")
os.system("cd ..")
os.system("cd envs")
os.system("cd test")
os.system("cd Script")
os.system("activate")
print(os.system("pip list"))
# 打印的为当前换进的包列表,并不是激活后的虚拟环境的包列表
-
原因:system函数可以将字符串转化成命令在服务器上运行;其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程;
-
使用system执行多条命令
-
为了保证system执行多条命令可以成功,多条命令需要在同一个子进程中运行;
-
import os os.system('cd /usr/local && mkdir aaa.txt') # 或者 os.system('cd /usr/local ; mkdir aaa.txt')
-
-
基于上述使用的扩展使用:
-
模拟环境: 在服务器上启动守护进程,直接启动也会有异常退出,毕竟守护进程也是有重启次数的, 这个时候就可以, 单独创建一个启动文件,用启动文件启动 程序。 再用守护进程启动这个 启动文件,做个异常处理,可以保证稳定启动
-
import os,time def start(): try os.system('cd /usr/local && scrapy crawl yourSpiderName') # 或者 os.system('cd /usr/local ; scrapy crawl yourSpiderName') except Exception as e: print('MyErrorAtStart: %s' % e) time.sleep(10) start() if __name__ == '__main__': start()
-
1.1返回值
-
三种返回值
- 0:成功
- 1:失败
- 2:错误
-
import os res=os.system("cd ..") print(res)# 0 执行成功 res=os.system("cd xxxxxxxx") print(res)#1,并出现乱码,终端的提示信息
2.获取当前的文件的路径
print(os.getcwd())#获取当前脚本文件的路径
3.补充,查看路径
-
Linux
pwd
-
Windows
chidr # 终端查看当前的命令
-
补充Windows的命令
# 直接转换到其他盘 e: #直接切换到E盘 # 直接且换到跟目录 cd /
4.os.chdir()
-
修改工作路径、
-
print(os.getcwd()) os.chdir("E:\envs\crawjob\Scripts") print(os.getcwd())
-
参数直接传入对应的路径
-
5、结合使用
-
由于需要多次执行路径切换的命令,因此可以先使用
os.chdir()
方法进行参数的路径的修改,之后在进行虚拟环境的激活,随后启动项目 -
# -*- coding: utf-8 -*- ''' @Time : 2021/11/17 11:18 @Author : ziqingbaojian @File : 终端执行2.py ''' import os print(os.getcwd()) os.chdir("E:\envs\crawjob\Scripts") print(os.getcwd()) res=os.system("activate && cd \ && cd project\prozhjy\djangocrawjob && python manage.py runserver 127.0.0.1:8001") print(res)
-
使用连接符
&&
进行连接多条命令;
踩坑不易,转载请注明出处;