从哪里开始创建CLI应用程序?[关闭]


8

使用Linux一两个月后,我知道我现在在做什么。

在使用任何语言创建程序时,我显然一直在使用如下代码:

$ python test.py

因此,如果我想test.py读取给定的文件,则必须使用:

$ python test.py something.file

我现在想做的是,它尝试创建一个命令行应用程序,因此我可以使用

$ myapp something.file

诸如pythonin $ python test.pynanoin之类的程序$ nano program.pl

但是,我应该在哪里开始构建此类应用程序?有点网络拖拖拉拉让我无处可去。

如果您能告诉我自己那很好,但是我会很乐意接受一堆链接。

如果有不止一种方法,我将完全开放,我真的不在乎什么语言(学习另一种语言的借口!)或其他任何语言。


3
您是要学习Unix C编程还是只需要能够运行python脚本而无需指定python部件?
2012年

@ jw013我想学习Unix C编程。(尽管我很想知道如何在不使用python。的情况下运行python脚本。)
ACarter 2012年

4
然后,您可能应该解决问题:) CLI应用程序可以用任何具有Unix编译器或解释器的语言编写,因此,如果您只对C感兴趣,请这么说。Unix C编程实际上是两个部分-Unix部分和C部分。就是这样,“我如何学习Unix C编程?” 可能因为过于笼统而被关闭,并且该站点上可能有重复项。“我如何学习C编程”也太笼统了,可能也太离题了。SO肯定会关闭。
2012年

@ jw013我真正想得到的是诸如 “可以使用具有Unix编译器或解释器的任何语言编写CLI应用程序”之类的建议,所以谢谢。
ACarter 2012年

1
喔好吧。尝试进入Unix环境时,学习曲线总是会有一个陡峭的初始驼峰,但是一旦您克服了这一难题,我相信您会发现值得付出的努力。不幸的是,我不知道要入门的任何资源-您基本上必须随身携带一些零碎的东西:\\旅途中最幸运的是:)
jw013

Answers:


15

您可以通过将python脚本设为可执行文件(chmod +x test.py)并使其#!/usr/bin/env python第一行来运行它们。完成后,运行test.py args将调用python运行脚本。如果您想了解更多,请阅读有关shebang的信息。


那对我没用。$ test.py 30出现了bash错误:-bash: test.py: command not found。到目前为止,感谢您的帮助!
ACarter 2012年

8
@ACarter那是因为它不在您的中$PATH。使用路径(例如/path/to/test.py./test.py如果您已经进入)/path/to,或添加/path/to到中$PATH。这个站点上有很多关于后者的重复问题。
jw013

一旦在您的东西中放了东西$PATH,就不用像.py
Reactormonk 2012年

您必须先#!/usr/bin/env python在脚本顶部添加,然后才能删除.py扩展名。但是,包含此调用或类似调用的任何脚本(例如,#!/bin/sh用于shell脚本)都可以命名而无需扩展名。它与是否在PATH中无关。
迈克尔·汉普顿

2
需要明确的是,与Windows不同,扩展在Unix世界中并不重要。这里的扩展名如.EXE.COM问题。但是,删除扩展名的基本原理是通用可执行文件应该只是通用可执行文件。重言式的含义是用户只需要功能,而无需知道或关心它是Perl还是Python或sh或bash或awk等。这是与实现无关的细节。并且,使脚本可执行并添加shebang使其成为通用可执行文件。
jw013

2

在C中,它看起来像这样:

int main(int argc, char *argv[]) {

argc是参数的数量。请注意,程序/工具名称很重要。

参数本身以参数向量(或数组)argv结尾。

然后是编写代码的棘手部分,以按预期方式处理它们。

然后用gcc编译。您可以使用-o(outfile)标志指定程序的名称。从当前目录运行文件,如下所示:(./tool_name input_file_1 ... input_file_n或将其放置在写入时出现的目录中echo $PATH,然后可以从任何位置调用文件,即不带点)。


1

我用围棋。它是一种跨平台的编译语言,易于编程动态语言,并支持并发和通信。

我不会回过头来讨论Python,因为用Go进行开发非常有趣。

http://golang.org/
https://github.com/languages/Go

在这里,您有一个简单的程序,该程序获取该命令中使用的参数:

package main

import (
  "fmt"
  "flag"
)

func main() {
  fmt.Println("Arguments: ", flag.Args())
}

http://play.golang.org/p/1dpUT11-cc


Go对于某些目标用例而言非常有用;但是,将Go和Python进行一般用途的比较就像将猎刀(Go)与瑞士军刀(Python)进行比较
Mike Pennington

1
Go是一种通用语言,正在Youtube中,Web应用程序中或用于构建游戏(正在开发一款游戏,正在开发另一款游戏)。另外要在CLI应用程序中使用。
Marc

5
他只想知道如何制作可执行程序。我们真的不需要
卷入
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.