广告
返回顶部
首页 > 资讯 > 操作系统 >使用Rust开发命令行工具
  • 932
分享到

使用Rust开发命令行工具

后端 2023-08-30 16:08:29 932人浏览 泡泡鱼
摘要

生成二进制文件,将其扔到环境变量的path下即可~ 用rust打造实时天气命令行工具[1] 找到合适的api 使用该api[2] 如请求 api.openweathermap.org/da

生成二进制文件,将其扔到环境变量的path下即可~


用rust打造实时天气命令行工具[1]


找到合适的api


使用该api[2]

alt
alt

如请求 api.openweathermap.org/data/2.5/weather?q=Beijing&appid=your_key:

{
 "coord": {
  "lon"116.3972,
  "lat"39.9075
 },
 "weather": [{
  "id"803,
  "main""Clouds",
  "description""broken clouds",
  "icon""04d"
 }],
 "base""stations",
 "main": {
  "temp"293.35,
  "feels_like"292.34,
  "temp_min"291.09,
  "temp_max"294.13,
  "pressure"1026,
  "humidity"35,
  "sea_level"1026,
  "grnd_level"1020
 },
 "visibility"10000,
 "wind": {
  "speed"4.86,
  "deg"344,
  "gust"7.43
 },
 "clouds": {
  "all"73
 },
 "dt"1634262993,
 "sys": {
  "type"2,
  "id"2021025,
  "country""CN",
  "sunrise"1634250256,
  "sunset"1634290552
 },
 "timezone"28800,
 "id"1816670,
 "name""Beijing",
 "cod"200
}

初始化项目&coding


使用carGo new rust_weather 初始化一个项目。

对于cargo.toml文件:

[package]name = "rust_weather"version = "0.1.0"edition = "2018"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]structopt = "0.3.21"exitfailure = "0.5.1"serde = "1.0.114"serde_JSON = "1.0.56"serde_derive = "1.0.114"reqwest = { version = "0.11", features = ["json"] }tokio = { version = "1", features = ["full"] }

对于src/main.rs文件:

use exitfailure::ExitFailure;
use reqwest::Url;
use serde_derive::{Deserialize, Serialize};
use structopt::StructOpt;

#[derive(Serialize,Deserialize,Debug)]
struct W {
    coord: Coord,
    weather: Weather,
    base: String,
    main: Main,
}

impl W {
    async fn get(city: &String) -> Result<Self, ExitFailure> {
        let url = fORMat!("Https://api.openweathermap.org/data/2.5/weather?q={}&appid=40452068d845180226c3f289341974b7", city);
        // 转换为url
        let url = Url::parse(&*url)?;
        let resp = reqwest::get(url).await?.json::().await?;
        Ok(resp)
    }
}

#[derive(Serialize,Deserialize,Debug)]
struct Coord {
    lon: f64,
    lat: f64,
}

#[derive(Serialize,Deserialize,Debug)]
struct Weather {
    details: Details,
}

#[derive(Serialize,Deserialize,Debug)]
struct Details {
    id: i32,
    main: String,
    description: String,
    icon: String,
}

#[derive(Serialize,Deserialize,Debug)]
struct Main {
    temp: f64,
    feels_like: f64,
    temp_min: f64,
    temp_max: f64,
    pressure: i32,
    humidity: i32,

}


#[derive(StructOpt)]
struct Input {
    city: String
}

#[tokio::main]
async fn main() -> Result<(), ExitFailure> {
    let input = Input::from_args();
    //println!("{}", input.city);


    let resp = W::get(&input.city).await?;

    println!("{} \n 天气: {} \n 当前温度: {} \n 最高温度: {} \n 最低温度: {} \n 湿度: {}", input.city, resp.weather.details.main, resp.main.temp, resp.main.temp_max, resp.main.temp_min, resp.main.humidity);

    //println!("Hello, world!");
    Ok(())
}


使用cargo run Beijing进行调试

直到能够准确输出预订结果,如下:

➜  rust_weather git:(master) ✗ cargo run Beijing
    Finished dev [unoptimized + debuginfo] target(s) in 0.13s
     Running `target/debug/rust_weather Beijing`
Beijing 
 天气: Clouds 
 当前温度: 293.35 
 最高温度: 294.13 
 最低温度: 291.09 
 湿度: 35

将二进制文件移动到系统PATH路径下


此时target/debug/rust_weather即想要的二进制文件,可将其复制到任意一个系统PATH路径下

echo $PATH

/opt/homebrew/opt/node@12/bin:/Users/fliter/.nvm/versions/node/v16.9.0/bin:/usr/local/Cellar/Mysql@5.7/5.7.28/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Users/fliter/.cargo/bin:/usr/local/go/bin:/Users/fliter/go/bin:/Users/fliter/Downloads/:/bin:/usr/local/mongoDB/bin:/usr/local/Cellar/FFmpeg/4.3.1/bin:/Users/fliter/.cargo/bin

还可以重命名,如改为weather,复制到usr/local/bin下,而后source .zshrc


在任意命令行窗口下,执行 weather Binzhou:

Binzhou 
 天气: Rain 
 当前温度: 291.63 
 最高温度: 291.63 
 最低温度: 291.63 
 湿度: 67

参考自原子之音[3]

参考资料

[1]

用rust打造实时天气命令行工具: https://www.bilibili.com/video/BV1eL411b7EL

[2]

该api: https://openweathermap.org/api

[3]

原子之音: https://www.bilibili.com/video/BV1eL411b7EL

本文由 mdnice 多平台发布

来源地址:https://blog.csdn.net/techdashen/article/details/132522426

--结束END--

本文标题: 使用Rust开发命令行工具

本文链接: https://www.lsjlt.com/news/383174.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Rust开发命令行工具
    生成二进制文件,将其扔到环境变量的path下即可~ 用rust打造实时天气命令行工具[1] 找到合适的API 使用该api[2] 如请求 api.openweathermap.org/da...
    99+
    2023-08-30
    后端
  • Rust实现grep命令行工具的方法
    目录一、功能:二、介绍2.1 使用到的知识:2.2 代码三、使用一、功能: 1、输入要查询的字符串和文件名,输出所有匹配的行的内容 2、如果设置环境变量IGNORE_CASE,则gr...
    99+
    2022-11-13
  • 如何用Plumbum开发Python命令行工具
    如何用Plumbum开发Python命令行工具,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。主要介绍如何使用 Plumbum CLI 工具包来开发 Python 命令行应用程序...
    99+
    2023-06-17
  • 怎么使用node开发一个mycli命令行工具
    这篇文章主要介绍了怎么使用node开发一个mycli命令行工具的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用node开发一个mycli命令行工具文章都会有所收获,下面我们一起来看看吧。初始化首先要确保电...
    99+
    2023-07-02
  • 详解Node.js如何开发命令行工具
    前言 Node 给前端开发带来了很大的改变,促进了前端开发的自动化,我们可以简化开发工作,然后利用各种工具包生成生产环境。如运行sass src/sass/main.scss dist/css/main.c...
    99+
    2022-06-04
    命令行 详解 工具
  • EntityFrameworkCore工具使用命令行
    命令列表 Cmdlet Description -------------------------- ---------...
    99+
    2022-11-13
  • 如何使用node开发一个命令行压缩工具
    本篇内容主要讲解“如何使用node开发一个命令行压缩工具”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用node开发一个命令行压缩工具”吧!对比来跟 Co...
    99+
    2022-10-19
  • python开发简单的命令行工具简介
    目录介绍python标准库sys模块命令行工具概念基础示例使用介绍可选参数设置必选参数设置列表参数传入设置互斥参数默认参数设置介绍 Python模块argparse,这是一个命令行选...
    99+
    2023-02-01
    python开发命令行工具 python制作命令行工具 Pyth编写命令行工具
  • 怎么从零开发一个node命令行工具
    本篇内容介绍了“怎么从零开发一个node命令行工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是命令...
    99+
    2022-10-19
  • 怎么使用命令行sxstrace.exe工具
    今天小编给大家分享一下怎么使用命令行sxstrace.exe工具的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用命令行sx...
    99+
    2023-07-01
  • CliTodo命令行todo工具使用演示
    目录前言链接使用演示实现过程实现命令行参数实现可以操作的命令行待办项保存在本地前言 bald3r-node-todo是一个用node.js开发的,主要用于命令行的todo工具,主要使...
    99+
    2022-11-13
    Cli Todo命令行todo工具 Cli Todo
  • Node.js 使用命令行工具检查更新
    随着 Node.js 的“走红”,使用 Node.js 开发命令行工具越来越简单。一个成熟的命令行工具应该从一开始就要考虑好之后的版本更新如何“优雅”的告知用户。最好的方法当然是当用户在终端执行命令时,将相...
    99+
    2022-06-04
    命令行 工具 Node
  • Oracle中DBV命令行工具如何使用
    这期内容当中小编将会给大家带来有关Oracle中DBV命令行工具如何使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。特点:以只读的方式打开数据文件,在检查过程中不会修改...
    99+
    2022-10-18
  • Linux命令行工具exa怎么用
    小编给大家分享一下Linux命令行工具exa怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!exa 命令简介exa 是一个命令行工具,可以列出指定路径(如未指...
    99+
    2023-06-27
  • Python命令行工具clint怎么用
    这期内容当中小编将会给大家带来有关Python命令行工具clint怎么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Clint 是一个包含了用于开发命令行应用的工具集合模块。它支持高亮,但是在会话为 T...
    99+
    2023-06-02
  • Redis命令行工具有哪些使用方法
    这篇文章主要介绍“Redis命令行工具有哪些使用方法”,在日常操作中,相信很多人在Redis命令行工具有哪些使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis命令行工具有哪些使用方法”的疑惑有所...
    99+
    2023-06-04
  • 怎么使用Node.js写一个命令行工具
    这篇文章主要介绍“怎么使用Node.js写一个命令行工具”,在日常操作中,相信很多人在怎么使用Node.js写一个命令行工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Node.js写一个命令行工具...
    99+
    2023-06-17
  • 如何使用Node.js写一个命令行工具
    这篇文章给大家分享的是有关如何使用Node.js写一个命令行工具的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:操作系统需要为Linux1. 目标在命令行输入自己写的命令...
    99+
    2022-10-19
  • 使用kubeadm命令行工具创建kubernetes集群
    目录命令行工具通过软件仓库安装二进制文件下载安装ubutu & centos 快速安装创建 kubernetes 集群1,创建 Master2,然后初始化集群网络。3,加入集...
    99+
    2022-11-13
  • Netsh.exe工具和命令行开关的示例分析
    这篇文章主要为大家展示了“Netsh.exe工具和命令行开关的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Netsh.exe工具和命令行开关的示例分析”这篇文章吧。使用 Netsh.e...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作