zoukankan      html  css  js  c++  java
  • 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函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程;

    • image-20211117110703495

    • 使用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())
        
      • 参数直接传入对应的路径

      • image-20211118104938467

    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)
      
    • 使用连接符&&进行连接多条命令;

    • image-20211118110348876

    踩坑不易,转载请注明出处;

  • 相关阅读:
    使用EFCore连接现有数据库
    C#面试题总结
    xamarin学习--发布apk安装包
    xamarin学习--导航参数注意事项
    centos8 安装 gitlab
    mvc添加全局过滤器
    Windows平台查看端口占用情况
    asp.net core cli---创建一个不启用https的项目
    asp.net core cli
    启动nuxt项目报错WARN node unsupported "node@v8.9.3" is incompatible with chalk@^4.1.0, expec...
  • 原文地址:https://www.cnblogs.com/Blogwj123/p/15571366.html
Copyright © 2011-2022 走看看