zoukankan      html  css  js  c++  java
  • Python exec()学习

    exec语句用来执行存储在字符串或文件中的Python语句,当时学java时就不断想,如果一个方法不断读取自己的内容然后去执行读取到的内容,那应该是一件很有意思的事情

    今天学习Python时看到了exec,惊为神器,怎么会有这么好的方法,于是果断去实现自己的想法

    下面是我的代码,欢迎批评指正

    #!/usr/bin/python
    import time
    print('yes.i can')
    time.sleep(1)
    f = file('/home/t.py')
    while True:
        line = f.readline()
        if(len(line)==1):
          break
        else:
          exec(line)
    f.close()
          
    

    先执行一条打印,然后再去休眠两秒,最后再读取自己文件的内容去执行,可以得到一个死循环

    于是我在想java应该也有类似的功能。去网上搜还真找到了

    package myPcg6;
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.util.Arrays;
    import java.util.List;
    
    import javax.tools.JavaCompiler;
    import javax.tools.SimpleJavaFileObject;
    import javax.tools.StandardJavaFileManager;
    import javax.tools.ToolProvider;
    import javax.tools.JavaCompiler.CompilationTask;
    
    public class CompilerTest { 
          
        public static void main(String[] args) throws Exception {       
           String source = "public class Main {" +
                                   "public static void main(String[] args) {" +
                                       "System.out.println("Hello World!");" +
                                    "} " +
                               "}";       
           
           
           JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
           StandardJavaFileManager fileManager =  compiler.getStandardFileManager(null, null, null); 
           StringSourceJavaObject sourceObject = new CompilerTest.StringSourceJavaObject("Main", source); 
           List<StringSourceJavaObject> fileObjects =  Arrays.asList(sourceObject); 
           CompilationTask task = compiler.getTask(null, fileManager, null, null, null, fileObjects); 
           
           boolean result = task.call(); 
           if (result) { 
              System.out.println("Compile succeeded!"); 
           }  else {
              System.out.println("Compile failed!"); 
           }
        } 
      
        static class StringSourceJavaObject extends SimpleJavaFileObject { 
      
           private String content = null; 
           public StringSourceJavaObject(String name, String content) throws URISyntaxException { 
              super(URI.create("string:///" + name.replace('.','/') +  Kind.SOURCE.extension), Kind.SOURCE); 
              this.content = content; 
           } 
      
           @Override
           public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { 
              return content; 
           } 
        } 
     }
    

      上面是某个大神的代码,http://www.cnblogs.com/fangwenyu/archive/2011/10/12/2209051.html,里面说的很详细,当然这只是工具,会用即可

    从上面忽然想到,原来秋招时考试提交的代码大概就是这么处理的吧

  • 相关阅读:
    SQL SERVER中DBLINK的实现
    如何在 Amazon AWS 上设置一台 Linux 服务器
    如何在 Amazon AWS 上设置一台 Linux 服务器
    django 后台数据直接交给页面
    django locals()
    让MySQL支持Emoji表情 mysql 5.6
    MySQL数据技术嘉年华,带你深入MySQL的世界
    Python爬虫入门教程 17-100 CSDN博客抓取数据
    JAVA生成图片缩略图、JAVA截取图片局部内容
    Python爬虫入门教程 16-100 500px摄影师社区抓取摄影师数据
  • 原文地址:https://www.cnblogs.com/sdnu-zhang/p/8430542.html
Copyright © 2011-2022 走看看