24 个版本
0.8.2 | 2021 年 3 月 30 日 |
---|---|
0.7.3 | 2020 年 12 月 5 日 |
0.7.2 | 2020 年 10 月 12 日 |
0.6.2 | 2020 年 4 月 19 日 |
0.3.3 | 2019 年 6 月 3 日 |
#1996 在 命令行工具
93 每月下载次数
105KB
2K SLoC
hors
一个很棒的程序 howdoi,它是用 Rust 实现的,同时还提供了一个易于使用的库。
它的速度比原始的 howdoi 程序要快。
关于二进制使用,请参阅本文件的其余部分。有关库文档,请查看此处。
截图
简单使用示例
更多示例
安装
hors是用 Rust
编写的。安装 hors
的推荐方法是使用 cargo
。
cargo install hors
在 Windows/Linux/macOS 平台上,您可以从 GitHub 下载预构建的二进制文件发布页面
在 macOS 上
hors 可以通过 homebrew 安装。
brew tap hors-org/hors && brew install hors
在 Windows 上
hors 可以通过 scoop 安装。
scoop bucket add w-bucket https://github.com/hors-org/w-bucket; scoop install hors
让它变得快速的原因
- 在 Rust 中实现,这导致了更少的运行时开销。
- 利用 tokio 并发功能,所以 hors 在需要获取多个答案时将进行并发搜索。
- 输出将被缓存,当您想要搜索相同的问题时, hors 将可能使用更少的网络流量来获取答案。
这里是一个简单的基准报告,在我的个人电脑上运行以下命令 3 次
time hors mysql create table with column comment -a -n 10 --paging never -e bing
rm ~/Library/Caches/hors/answers
注意:运行 rm
命令的目的是清除本地缓存。
它给了我以下输出
Executed in 2.55 secs fish external
usr time 232.71 millis 150.00 micros 232.56 millis
sys time 16.68 millis 562.00 micros 16.12 millis
Executed in 3.68 secs fish external
usr time 252.02 millis 125.00 micros 251.90 millis
sys time 19.18 millis 550.00 micros 18.63 millis
Executed in 2.55 secs fish external
usr time 237.19 millis 117.00 micros 237.07 millis
sys time 17.63 millis 565.00 micros 17.06 millis
用 howdoi 运行相同的命令
time howdoi mysql create table with column comment -a -n 4 -e bing -c
rm ~/Library/Caches/howdoi/*
注意:运行 rm
命令的目的是清除 howdoi 的本地缓存。
它给了我以下输出
Executed in 3.48 secs fish external
usr time 303.67 millis 127.00 micros 303.54 millis
sys time 52.53 millis 601.00 micros 51.93 millis
Executed in 3.65 secs fish external
usr time 305.37 millis 111.00 micros 305.26 millis
sys time 53.16 millis 549.00 micros 52.61 millis
Executed in 3.34 secs fish external
usr time 319.07 millis 14.24 millis 304.83 millis
sys time 55.63 millis 3.37 millis 52.26 millis
但请注意,这个简单的基准并不是非常精确,它高度依赖于网络信息。
测试平台
到目前为止, hors
已经在以下平台上进行了测试
- Linux
- OSX
- Windows
用法
USAGE:
hors [FLAGS] [OPTIONS] [query]...
ARGS:
<query>...
FLAGS:
-a, --all display the full text of answer.
--clear-cache just clear local hors cache.
-d, --disable-proxy Disable system proxy.
-h, --help Prints help information
-l, --link display only the answer link.
-r, --raw make raw output (not colorized).
-V, --version Prints version information
OPTIONS:
-e, --engine <engine> select middle search engine, currently support `bing`, `google`,
`duckduckgo`, `stackoverflow`. [env: HORS_ENGINE=bing] [default:
duckduckgo]
-n, --number-answers <number-answers> number of answers to return. [default: 1]
-p, --paging <paging> specify how to page output, can be `auto`, `never` [default: auto]
用法示例
- 想知道如何将 pandas dataframe 导出为 csv 文件吗?
hors pandas dataframe to csv
这里就是答案
- Answer from https://stackoverflow.com/questions/16923281/pandas-writing-dataframe-to-csv-file
df.to_csv(file_name, sep='\t')
- 我们只想知道答案在哪里存在?
hors pandas dataframe to csv -l
这里就是答案
Title - pandas writing dataframe to csv file
https://stackoverflow.com/questions/16923281/pandas-writing-dataframe-to-csv-file
- 我们想要更多关于答案的详细信息?
hors how to parse json in rust -a
这里就是答案
- Answer from https://stackoverflow.com/questions/30292752/how-do-i-parse-a-json-file
Solved by the many helpful members of the Rust community:
extern crate rustc_serialize;
use rustc_serialize::json::Json;
use std::fs::File;
use std::io::Read;
fn main() {
let mut file = File::open("text.json").unwrap();
let mut data = String::new();
file.read_to_string(&mut data).unwrap();
let json = Json::from_str(&data).unwrap();
println!("{}", json.find_path(&["Address", "Street"]).unwrap());
}
- 如何获取多个答案
hors set git remote url -n 2 -a
这里就是答案
- Answer from https://stackoverflow.com/questions/2432764/how-to-change-the-uri-url-for-a-remote-git-repository
You can
git remote set-url origin new.git.url/here
(see git help remote) or you can just edit .git/config and change the URLs there. You're not in any danger of losing history unless you do something very silly (and if you're worried, just make a copy of your repo, since your repo is your history.)
^_^ ==================================================== ^_^
- Answer from https://stackoverflow.com/questions/42830557/git-remote-add-origin-vs-remote-set-url-origin
below is used to a add a new remote:
git remote add origin git@github.com:User/UserRepo.git
below is used to change the url of an existing remote repository:
git remote set-url origin git@github.com:User/UserRepo.git
below will push your code to the master branch of the remote repository defined with origin and -u let you point your current local branch to the remote master branch:
git push -u origin master
Documentation
- 默认的搜索引擎是bing,我该如何使用其他搜索引擎呢?
hors set git remote url -n 2 -a -e "google"
代理支持
如果感觉网络被屏蔽了,你可以尝试按照如下配置代理
export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087;
当然,这应该是你机器上有效的代理。
Windows上的分页功能
Hors使用less
命令来实现分页功能,但这个命令在Windows上默认没有安装。你可以使用scoop来安装less
scoop install less
或者使用choco
choco install less
将Hors作为库使用
Hors可以用作库,以下是一个例子
use std::str::FromStr;
use hors::{self, SearchEngine};
let search_engine: SearchEngine = SearchEngine::from_str("bing").unwrap();
let target_links: Vec<String> = hors::search_links(
"how to parse json in rust",
search_engine,
)
.await
.unwrap();
assert_ne!(target_links.len(), 0);
for link in target_links {
assert!(link.contains("stackoverflow.com"));
}
更多信息,请查看文档
特别感谢
非常感谢这个出色的项目和链接 :)
- howdoi启发了
hors
(目前hors
是howdoi
,它是用rust
实现的)。 - stackoverflow帮助用户解决编码问题。
关于名称
hors
是howdoi in rust
的缩写。
依赖项
~15–29MB
~451K SLoC