我如何从命令提示符运行单行代码(而不是脚本)?

时间:2015-11-24 20:40:33

标签: command-line cmd

这里的简单问题,似乎无法以一种可以理解的方式传递谷歌。

假设我想从命令提示符命令行执行一行实际编程代码(c ++或java或python ...等),如SetCursorPos或printf。我模糊地想象我必须调用编译器并将命令传递给它,就像参数一样,然后将其转换为机器语言并传递给......究竟在哪里?

好的,这就是两个问题。

  1. 如何从命令行运行实际代码和

  2. 执行完全编译的程序或转换后的代码行(假设这些基本上是二进制容器)时,究竟发生了什么?

  3. 问题一显然优先。不幸的是,我找不到任何关于它的文档,只是一些与它模糊相关的东西。

1 个答案:

答案 0 :(得分:1)

  

如何从命令行运行实际代码

在不深入研究它们之间的大量模糊性的情况下,语言实现有两大类:解释器和编译器。

对于许多解释器(或具有隐式编译的实现,例如V8 JavaScript的编译器,或几乎任何具有的实现),从命令行运行单行应该是相当简单的。 CPython(Python的标准实现)具有-c command选项:

$ python -c 'print("Hello, world!")'
Hello, world!

使用显式编译步骤的语言实现往往不那么简单。特别是,编译器需要直接从参数列表中接受源,或者从标准输入(通过管道或重定向)接受源。在输出端,您的编译器必须支持立即执行该程序,或将其输出到标准输出,以便操作系统功能(如果存在)可以从管道执行它。

据我所知,大多数显式编译器的设计并未考虑到这些用法。在这种情况下,最好的办法是查看是否有可用于所讨论语言的REPL,最好是与编译器兼容的REPL,或创建(或查找)使其看起来像您的语言的包装器REPL。包装器会:

  1. 接受上面CPython的输入。
  2. 使用要运行的代码和任何必要的样板文件在幕后创建临时源文件。
  3. 将该文件传递给编译器。
  4. 自动运行生成的可执行文件。
  5. 删除源文件和可执行文件。如果它们位于临时目录中,操作系统稍后可以清除它们。
  6. 从用户的角度来看,这个应该看起来与CPython示例非常相似,因为它们不必与编译器或临时文件进行交互或查看。