В hibernate есть кеш запросов, но я не уверен, можно ли его назвать кешем третьего уровня. Я не слышал такого имени. В любом случае кеш запросов будет применяться для данных, которые часто не меняются.
Его документацию можно найти по адресу: http://docs.jboss.org/hibernate/orm/5.0/userguide /html_single/Hibernate_User_Guide.html#caching-query
Command::new
- это действительно путь, но он предназначен для выполнения программы. ls ; sleep 1; ls
не является программой, это инструкции для некоторой оболочки. Если вы хотите выполнить что-то подобное, вам нужно попросить оболочку интерпретировать это для вас:
Command::new("/usr/bin/sh").args(&["-c", "ls ; sleep 1; ls"])
// your complex command is just an argument for the shell
Чтобы получить выход, существует два способа:
output
блокирует и возвращает выходы и статус выхода команды. spawn
блокировки и возвращает дескриптор, содержащий дочерний процесс stdin
, stdout
и stderr
, чтобы вы могли общаться с дочерним элементом, и метод wait
, чтобы дождаться его завершения. Обратите внимание, что по умолчанию дочерний элемент наследует свой родительский дескриптор файла, и вы можете вместо этого настроить каналы: Вы должны использовать что-то вроде:
let child = Command::new("/usr/bin/sh")
.args(&["-c", "ls sleep 1 ls"])
.stderr(std::process::Stdio::null()) // don't care about stderr
.stdout(std::process::Stdio::piped()) // set up stdout so we can read it
.stdin(std::process::Stdio::piped()) // set up stdin so we can write on it
.spawn().expect("Could not run the command"); // finally run the command
write_something_on(child.stdin);
read(child.stdout);
piped()
илиnull()
, потому что я хочу использовать дескрипторы файла родителя. – x4rkz 24 July 2016 в 12:01Command
следует за шаблоном построителя, немного более идиоматично структурировать его следующим образом: play.rust-lang.org/… – Nate Mara 25 July 2016 в 14:51self
требуется&mut self
. В любом случае, вы правы, я отредактирую свой ответ, спасибо. – mcarton 25 July 2016 в 14:58&mut self
. – Nate Mara 25 July 2016 в 15:00self
существует огромная вероятность того, что люди, не обращая внимания, напишутbuilder.foo(); builder.bar();
, игнорируя результат, так что это может быть причиной. Однако это можно было бы решить с помощью аннотацииmust_use
. Не знаю, я был просто удивлен там на мгновение. – mcarton 25 July 2016 в 15:08