• 在线编译系统之nodejs执行shell


      最近公司做个简单的小工具,是一个简单的在线编译系统。现在做几点简单的总结记录。

     1、路径的问题。

      node程序执行的路径,可能会影响程序中的相对路径使用。(这点有待进一步研究,分析理论)因此就用到了path模块。之前也没觉得这个模块有多重要,这次才发现它的方便。下面几个是我用到的。

      以下只是自己的简单理解,可能并不表达的那么准确,具体请参考nodejs的官网api。(建议看英文版的,中文版还是稍微有些不全的)

      path.resolve(from, to)  : from是一个绝对路径,to是一个相对路径,最终to的绝对路径。注意,to若是一个目录,则这个路径得到的是一个目录的路径,但这个路径最后没有“/”。若是文件,则是文件的绝对路径。

      path.relative(from,to): from和to都是绝对路径,得到from相对于to的相对路径。

      path.basename(p,[ext]):  得到路径最后的文件名,包括后缀名。如果加了ext参数项,则只返回文件的名字,不包括后缀名。

      path.extname(p):得到文件的后缀名,包括“.”。

      path.dirname(p):得到路径的目录名.不包括最后的“/”。

      path.join(args1, arg2....): 将各个参数合并为一个路径,并且规范化。 

    2、nodejs执行shell

      在这个编译系统中,很多东西都是用shell完成的。shell确实很重要,也需要花点时间去补充理论知识。

      在nodejs中执行shell,使用child_process.有三种方法,spawn,exec和execFile。spawn没怎么使用,所以我就没发言权,说下exec和execFile。前者建议使用于语句量小的,当然也可以执行多个语句,每个命令字符串用分割符连接。如果语句量多,还是建议使用文件。

      在执行shell,很重要的一点就是路径问题。因为shell中使用的相对路径相会失效。因为执行一个shell,会新建一个子进程,主进程的proces.env会传递到子线程。需要在主进程进入子进程前使用process.chmdir(),切换到shell的执行目录下。nodejs的api也非常周到,其中有个opts的参数,可以设置opts.cwd。来改变shell的执行环境。

    3、简单的shell编程

      自己没有shell的编程经验,所以无权说什么。有一点就是参数的传递,$1就是第一个参数,等等。

    4、async

      async模块一个非常重要。因为代码中设计很多异步函数,这样代码结构就非常乱。async的使用,可以是程序显得更简洁易看。

    async.series({
    
      one :func1(cb){},
    
      two.func2(cb){}
    
      .....
    
      function(err, ){
    
      });
    
    });
    

      只要有一个函数有错误就返回。最终会把每个的cb组成一个对象的元素。也可以定为数组。

      更多需要进一步学习。

     5、关于编程

      刚开始定任务自己就闷头干,代码写的很乱。而且中间需求变更带来的痛苦.....后来稍微用面向对象的重构了一下。所以,以后尽量要建立面向对象编程的思维,更立体,也更有利于维护。

  • 相关阅读:
    Neural Collaborative Filtering
    Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks
    Statistical Comparisons of Classifiers over Multiple Data Sets
    Data Poisoning Attacks on FactorizationBased Collaborative Filtering
    Markov Chain
    Adversarial Personalized Ranking for Recommendation
    常见网络协议
    Python3 JWT的生成与验证
    Python3函数中如何理解递归
    Python3使用re模块解析正则表达式
  • 原文地址:https://www.cnblogs.com/yilinfengluo/p/4769507.html
Copyright © 2020-2023  润新知