Python exec()学习

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/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应该也有类似的功能。去网上搜还真找到了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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,里面说的很详细,当然这只是工具,会用即可

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

 

posted @   凌羽1025  阅读(500)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示