ErrorKind
hata mesajını bulmak için e.kind()
kullanabilirsiniz.
match Command::new("rustc").spawn() {
Ok(_) => println!("Was spawned :)"),
Err(e) => {
if let NotFound = e.kind() {
println!("`rustc` was not found! Check your PATH!")
} else {
println!("Some strange error occurred :(");
}
},
}
Düzenleme: hata türlü iade edilebilir hususlar hakkında hiç açık belgeleri bulamadık, bu yüzden kaynak kodunu baktım. Hata, işletim sisteminden düz bir şekilde döndürülmüş gibi görünüyor. İlgili kod src/libstd/sys/[unix/windows/..]/process.rs
'da görünüyor. Unix sürümünden bir pasajı:
Bir daha düzenleme: Eğer github
üzerinde görebilmeniz için lisans aslında burada Pas kaynaklarının parçalarını gönderme sağlar eğer bir Düşündüm de, emin değilim Hangi sadece Error::from_raw_os_err(...)
döndürür. Windows sürümü daha karmaşık görünüyordu ve hataların nereden geldiğini hemen bulamadım. Her iki durumda da, bu sizin işletim sisteminizin merhametine benziyor. En azından ben src/libstd/process.rs
aşağıdaki testi bulundu:
aynı yukarıdaki gibi: github bir ErrorKind::NotFound
ikili bulunmazsa, en azından zaman döndürülmesi gereken garanti görünüyor
. İşletim Sisteminin diğer durumlarda bir NotFound hatası vermeyeceğini düşünmek mantıklıdır, ancak kim bilir. Programın gerçekten bulunmadığından kesinlikle emin olmak istiyorsanız, dizinleri elle $ PATH olarak aramak zorundasınız. Şunlar gibi:
use std::env;
use std::fs;
fn is_program_in_path(program: &str) -> bool {
if let Ok(path) = env::var("PATH") {
for p in path.split(":") {
let p_str = format!("{}/{}", p, program);
if fs::metadata(p_str).is_ok() {
return true;
}
}
}
false
}
fn main() {
let program = "rustca"; // shouldn't be found
if is_program_in_path(program) {
println!("Yes.");
} else {
println!("No.");
}
}
Teşekkürler :) Ancak, biraz daha derinlemesine cevap bekledim. İnsan sayfalarına ve/veya diğer belgelere bağlantılar. Benim 'if' koşulu, programın bulunamamış olup olmadığını değerlendirmelidir. Bu dava mı? Hangi hatanın ne zaman döndüğü hakkında daha fazla bilgi var mı? –
PATH ayırıcısı Windows'da '' '! –
@ FrancisGagné ve dizin ayırıcısı '\'. Örneğim gerçekten sadece Unix'ti. Muhtemelen bundan bahsetmeliydim. – jkiiski