2017-01-16 13 views
-3

Я просмотрел все и нашел множество ответов, и после долгих проб и ошибок я пришел к такому выводу: я не знаю.Как скрыть вывод команды, запущенной внутри sytem()?

Я бегу вещь в Perl:

my $command = sprintf('commandHereDoingSCPishThingsThatHasToRunInMyShell', options, options, options); 
system($command); 

Когда я бегу мой сценарий в моем окне терминала, я вижу вывод команды внутри функции Sprintf().

Я хотел бы, чтобы выход был перенаправлен в файл и не нужно было видеть выполнение программы в окне терминала.

Спасибо!

+4

Что-нибудь не так с 'командой> File'? – Havenard

+3

_I видеть выход команды внутри функции sprintf(). Невозможно. – 7stud

+0

функция sprintf, похоже, не нравится ... и по какой-то причине STILL печатает. – Oly396

ответ

2

Исходное использование системы perl() не рекомендуется, потому что нет необходимости обнаруживать ошибки и вызывать соответствующее сообщение об ошибке. Рассмотрите возможность использования IPC::System::Simple. Поскольку вы хотите захватить вывод, используйте его capture().

use IPC::System::Simple 'capture'; 

my $output = capture($command); # dies if command fails; catch this with eval if necessary 
File::Slurp::write_file('somefile', $output); 

В качестве альтернативы, просто перенаправить вывод в файл в вашей команде:

use IPC::System::Simple 'system'; 
system("$command >somefile"); 
+0

Это потрясающе! У меня есть небольшая проблема, хотя у меня нет доступа к IPC :: System :: Simple, так как это удаленная машина, и я не администратор в указанном ящике. :/ – Oly396

+2

'my $ cmd_stdout_output = \' $ cmd \ '' – 7stud

Смежные вопросы