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,里面说的很详细,当然这只是工具,会用即可
从上面忽然想到,原来秋招时考试提交的代码大概就是这么处理的吧
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步