Bắt đầu tạo ứng dụng CLI ở đâu? [đóng cửa]


8

Sau khi sử dụng linux một hoặc hai tháng, tôi biết mình đang làm gì.

Khi tạo chương trình, sử dụng bất kỳ ngôn ngữ nào, rõ ràng tôi đã sử dụng mã như thế này:

$ python test.py

Và nếu tôi muốn test.pyđọc một tập tin nhất định, tôi sẽ phải sử dụng:

$ python test.py something.file

Những gì tôi muốn làm bây giờ, nó thử và tạo một ứng dụng dòng lệnh, vì vậy tôi có thể sử dụng

$ myapp something.file

Một chương trình như pythontrong $ python test.pyhoặc nanotrong$ nano program.pl

Nhưng nơi nào trên trái đất tôi bắt đầu xây dựng các ứng dụng như thế này? Một chút truy tìm web đã đưa tôi đến nơi nào.

Nếu bạn có thể nói với tôi rằng điều đó thật tuyệt, nhưng tôi sẽ sẵn sàng chấp nhận một loạt các liên kết.

Tôi hoàn toàn cởi mở nếu có nhiều hơn một cách, tôi không thực sự bận tâm ngôn ngữ nào (lý do để học ngôn ngữ khác!) Hoặc bất cứ điều gì.


3
Bạn có muốn học lập trình Unix C hay bạn chỉ muốn có thể chạy các kịch bản python của mình mà không phải chỉ định pythonphần?
jw013

@ jw013 Tôi muốn học lập trình Unix C. (Mặc dù tôi rất muốn biết làm thế nào bạn có thể chạy các kịch bản python mà không cần python.)
ACarter

4
Có lẽ bạn nên sửa câu hỏi của mình sau đó :) Các ứng dụng CLI có thể được viết bằng bất kỳ ngôn ngữ nào có trình biên dịch hoặc trình thông dịch Unix, vì vậy nếu bạn chỉ quan tâm đến C, hãy nói như vậy. Lập trình Unix C thực sự là hai phần - phần Unix và phần C. Như nó là, "Làm thế nào để tôi học lập trình Unix C?" có thể sẽ bị đóng cửa vì quá chung chung và có thể có các bản sao trên tất cả các trang web này. "Làm thế nào để tôi học lập trình C" cũng quá chung chung và có thể ngoài chủ đề. Nó chắc chắn sẽ bị đóng cửa trên SO.
jw013

@ jw013 Điều tôi thực sự theo đuổi là lời khuyên như "Ứng dụng CLI có thể được viết bằng bất kỳ ngôn ngữ nào có trình biên dịch hoặc trình thông dịch Unix", xin cảm ơn.
ACarter

1
À, được rồi Luôn có một chút khó khăn ban đầu trong quá trình học tập khi cố gắng vào môi trường Unix, nhưng một khi bạn vượt qua nó, tôi chắc chắn bạn sẽ thấy nỗ lực đó là xứng đáng. Thật không may, tôi không biết bất kỳ tài nguyên nào tôi có thể chỉ ra để bắt đầu - về cơ bản bạn phải nhặt các bit và mảnh khi bạn đi: \
Chúc

Câu trả lời:


15

Bạn có thể chạy các kịch bản python bằng cách làm cho chúng thực thi ( chmod +x test.py) và tạo #!/usr/bin/env pythondòng đầu tiên. Khi bạn làm điều đó, chạy test.py argssẽ gọi python để chạy tập lệnh của bạn. Đọc về shebang nếu bạn muốn tìm hiểu thêm.


Điều đó đã không làm việc cho tôi. $ test.py 30đã đưa ra một lỗi bash : -bash: test.py: command not found. Cảm ơn sự giúp đỡ của bạn cho đến nay!
ACarter

8
@ACarter Đó là vì nó không phải của bạn $PATH. Hoặc sử dụng một đường dẫn, như /path/to/test.pyhoặc ./test.pynếu bạn /path/tođã ở trong , hoặc thêm /path/tovào của bạn $PATH. Có nhiều câu hỏi trùng lặp trên trang web này về sau này.
jw013

Ngay sau khi bạn đặt một cái gì đó trong của bạn $PATH, hãy để lại kết thúc tập tin như thế nào .py.
Reactormonk

Bạn cần #!/usr/bin/env pythonở đầu tập lệnh của mình trước khi có thể xóa phần mở rộng .py. Nhưng bất kỳ tập lệnh nào chứa lời gọi này hoặc một #!/bin/shtập lệnh tương tự (ví dụ: tập lệnh shell) có thể được đặt tên mà không có phần mở rộng. Nó không liên quan gì đến việc nó có trong PATH của bạn hay không.
Michael Hampton

2
Rõ ràng, các phần mở rộng không quan trọng trong thế giới Unix, không giống như trong Windows. nơi mở rộng thích .EXEvà quan .COMtrọng. Tuy nhiên, lý do đằng sau việc loại bỏ phần mở rộng là các tệp thực thi chung chỉ nên là các tệp thực thi chung. Ý nghĩa của tautology này là người dùng chỉ muốn chức năng và không cần biết hoặc quan tâm xem đó là Perl hay Python hay sh hay bash hay awk, v.v. - đó là một chi tiết triển khai không liên quan. Và, làm cho một kịch bản có thể thực thi được và thêm một shebang làm cho nó trở thành một tệp thực thi chung.
jw013

2

Trong C, nó trông như thế này:

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

Các argc là số lượng các đối số. Lưu ý rằng tên chương trình / công cụ được tính.

Các đối số kết thúc trong vectơ đối số (hoặc mảng), argv.

Sau đó, có phần khó khăn trong việc viết mã để đối phó với họ theo cách dự định.

Sau đó biên dịch với gcc. Bạn chỉ định tên của chương trình với -ocờ (outfile). Chạy tệp từ thư mục hiện tại của nó như thế này: ./tool_name input_file_1 ... input_file_n(hoặc đặt nó vào thư mục bật lên khi bạn viết echo $PATH, sau đó bạn có thể gọi nó từ bất cứ đâu, tức là không có dấu chấm).


1

Tôi dùng Go. Đó là ngôn ngữ được biên dịch, đa nền tảng, với việc dễ dàng lập trình ngôn ngữ động và hỗ trợ đồng thời và giao tiếp.

Tôi sẽ không quay lại với Python vì việc phát triển với Go rất buồn cười.

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

Ở đây bạn có một chương trình đơn giản lấy các đối số được sử dụng trong lệnh đó:

package main

import (
  "fmt"
  "flag"
)

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

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


Go là tuyệt vời cho một số trường hợp sử dụng mục tiêu; tuy nhiên, so sánh Go và Python cho các tiện ích chung cũng giống như so sánh một con dao săn (Go) với một con dao quân đội Thụy Sĩ (Python)
Mike Pennington

1
Go là một ngôn ngữ có mục đích chung, đang được sử dụng tức là trong Youtube, trong các ứng dụng web hoặc để xây dựng trò chơi (có một trò chơi đã hoàn thành và một trò chơi khác đang phát triển). Ngoài ra để được sử dụng trong các ứng dụng CLI.
Marc

5
Anh ta chỉ muốn biết làm thế nào để thực hiện một chương trình thực thi; chúng ta không thực sự cần phải tham gia vào một cuộc chiến ngôn ngữ
Michael Mrozek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.