幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4331|回复: 16

[通用编程] [分享]调用其他EXE

[复制链接]

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2007-11-21 21:29:10 | 显示全部楼层 |阅读模式
简单的增强一下我在用的文本编辑器的命令行功能。
  1. //run.d
  2. import std.process;
  3. import std.path;
  4. import std.windows.charset;
  5. import std.string;
  6. alias printf p;
  7. void main(char[][] args)
  8. {
  9.     if (args.length == 2)
  10.     {
  11.         char[] filename;
  12.         filename ~= addExt(getName(fromMBSz(args[1].ptr)),"exe");
  13.         int i = system(toString(toMBSz(filename)));
  14.         p("%s\n",toMBSz("\n运行的是 => " ~ filename));
  15.     }
  16.     else
  17.     {
  18.         p("%s\n",toMBSz("错误: 你没有输入参数,或者输入超过一个以上的参数!"));
  19.         p("%s\n",toMBSz("例: 当输入 'run c:\\test\\test.d' 时调用 'c:\\test\\test.exe'"));
  20.     }
  21. }
复制代码
え~え~お!!!
回复

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2007-11-22 18:31:21 | 显示全部楼层
Java:
  1. public class Program {
  2.     public static void main( String[] args ) throws IOException {
  3.         if ( 1 == args.length ) {
  4.             String command = args[0];
  5.             System.out.println("Running: " + command );
  6.             Process p = Runtime.getRuntime( ).exec( command );
  7.             
  8.             InputStream is = process.getInputStream();
  9.             InputStreamReader isr = new InputStreamReader( is );
  10.             BufferedReader br = new BufferedReader( isr );
  11.             String line;
  12.      
  13.             System.out.printf( "Output of running %s is:",
  14.                 Arrays.toString( args ) );
  15.      
  16.             while ( ( line = br.readLine( ) ) != null ) {
  17.               System.out.println(line);
  18.             }
  19.         } else {
  20.             System.err.println( "Error: missing argument or more than 1 argument is given" );
  21.             System.err.println( "Usage: java Program command" );
  22.         }
  23.     }
  24. }
复制代码

C#:
  1. public sealed class Program {
  2.     public static void Main(string[] args) {
  3.         if ( 1 == args.length ) {
  4.             System.Diagnostics.Process proc = new System.Diagnostics.Process();
  5.             proc.StartInfo.FileName = args[0];
  6.             proc.StartInfo.Arguments = string.Empty;
  7.             proc.StartInfo.UseShellExecute = false;
  8.             proc.StartInfo.RedirectStandardOutput = false;
  9.             proc.Start();
  10.             proc.WaitForExit();
  11.         } else {
  12.             System.Console.WriteLine( "Error: missing argument or more than 1 argument is given" );
  13.             System.Console.WriteLine( "Usage: Program command" );
  14.         }
  15.     }
  16. }
复制代码
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
 楼主| 发表于 2007-11-22 20:41:31 | 显示全部楼层
D中为了适应中文目录或文件名,我转了两次码。
而java,c#的代码看起来是一步到位了。极度心理不平衡中。 [s:4]
え~え~お!!!
回复 支持 反对

使用道具 举报

18

主题

428

帖子

5260

积分

⑦老手

在美工荒中挣扎的全能

积分
5260
QQ
发表于 2007-11-22 20:48:40 | 显示全部楼层
> <Shawind桑要是真对D有爱还是去扶持一个开源编译器吧。
我觉得DMD怕是争气不了了。
回复 支持 反对

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2007-11-22 21:55:24 | 显示全部楼层
引用第2楼shawind于2007-11-22 20:41发表的  :
D中为了适应中文目录或文件名,我转了两次码。
而java,c#的代码看起来是一步到位了。极度心理不平衡中。 [s:4]
么办法,D继承了C的一些糟糕特性。例如说虽然源文件支持UTF-8,内部也主要是用UTF-8来处理字符,但在关键的对外接口上没怎么处理。不setLocale的话随便你怎么用中文都是乱码 =_=||
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
 楼主| 发表于 2007-11-22 22:45:11 | 显示全部楼层
引用第3楼Miliardo于2007-11-22 20:48发表的  :
> <Shawind桑要是真对D有爱还是去扶持一个开源编译器吧。
我觉得DMD怕是争气不了了。
也不是真的有爱。本来我就是业余写了玩玩的,只要觉得顺眼,像SmallTalk,Object-c这类的冷门语言,也在守备范围内。D正好是看比较顺眼,仅此而已。
至于D的前途什么的,不是我应该去考虑的事。那是Walter Bright的事。
开源的gdc更不好用,特别是在写WIN GUI程序的时候,除非自己去写一个开源编译器。
但是,如果我有这么nb的本事,早就去写一个类似python或ruby的可编译的新语言了。
谁还用D...
未来的话,如果MS能稍微改善下.net的启动速度,我就和D拜拜,转去用IronRuby,或者IronPython了。
学D也不是没有什么收获,至少,我在D上学到了很多C/C++知识。难到这就是有心栽花花不开?
引用第4楼rednaxela于2007-11-22 21:55发表的  :

么办法,D继承了C的一些糟糕特性。例如说虽然源文件支持UTF-8,内部也主要是用UTF-8来处理字符,但在关键的对外接口上没怎么处理。不setLocale的话随便你怎么用中文都是乱码 =_=||
用tango的话,就不会有这个问题了。可我看到tango库就怕,觉得与其学着去用tango库,还不如去学C#了。
え~え~お!!!
回复 支持 反对

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2007-11-23 10:36:50 | 显示全部楼层
引用第5楼shawind于2007-11-22 22:45发表的  :
但是,如果我有这么nb的本事,早就去写一个类似python或ruby的可编译的新语言了。
谁还用D...
It's not even worth trying...
有好些尝试把Python直接编译为本地代码的项目了,然而数据显示它们甚至比解释执行的Python还慢。This may sound counterintuitive, but it's the fact.
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
 楼主| 发表于 2007-11-23 10:59:18 | 显示全部楼层
上次看pypy项目的时候,它还号称编译后可以比解释快70倍左右。[s:8]
就是这个东西太难用,至今没成功试用过一次。

这个,我所谓的“新语言”,也就是没有;{}符号,强格式书写,符合C99标准,和C代码二进制兼容的另一个c语言...当然这种小事对高手来说,最多也就是一天的时间。  [s:6]
え~え~お!!!
回复 支持 反对

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2007-11-23 13:50:37 | 显示全部楼层
你看的资料的来源是?有兴趣看看。
PyPy本身是用RPython写的。RPython是Python的一个子集,可以说已经相当退化了——它的动态性被极度限制,因而可以生成高效的编译后本地代码。但将完整的Python编译为本地代码的尝试,在效率意义上说几乎都失败了;因为Python有内在的动态性,编译时信息极度匮乏,所以静态编译难以生成好的本地代码。PyPy项目中所实现的完整Python也仍然是解释的:一个字节码编译器将Python编译为字节码,一个字节码解释器解释执行字节码,和一个标准对象空间。

不过说到PyPy,它有一个LLVM的后端。这玩意相当有爱。
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
 楼主| 发表于 2007-11-23 17:26:02 | 显示全部楼层
http://programming.reddit.com/info/152lr/comments/c156v0
  1. Just for those who want to check pypy out a bit:
  2. First download pypy, then run the translatorshell in the bin/ directory.
  3. $ python translatorshell.py
  4. *snip*
  5. >>> def ack(x,y):
  6. ...   if x == 0: return y + 1
  7. ...   elif y == 0: return ack(x - 1, 1)
  8. ...   else: return ack(x - 1, ack(x, y - 1))
  9. ...
  10. >>> t = Translation(ack)
  11. >>> t.annotate([int, int])
  12. *snip*
  13. >>> t.rtype()
  14. *snip*
  15. >>> ack_c = t.compile_c()
  16. *snip*
  17. >>> import time
  18. >>> start = time.time(); ack(3,6); print time.time() - start
  19. 509
  20. 0.19878911972
  21. >>> start = time.time(); ack_c(3,6); print time.time() - start
  22. 509
  23. 0.00290894508362
  24. The C version is nearly 70 times faster than the pure python version.
  25. I do know that this is not the usual real life bottleneck that you run across, but it does somehow show PyPy's potential.
复制代码
え~え~お!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-4 07:09 , Processed in 0.025463 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表