Вы можете использовать getActivity()
, который возвращает активность, связанную с фрагментом. Активность - это контекст (поскольку Activity расширяет контекст) .
Как я понимаю, система () распечатает результат команды, но не присвоит его. Например.
[daniel@tux /]$ perl -e '$ls = system("ls"); print "Result: $ls\n"'
bin dev home lost+found misc net proc sbin srv System tools var
boot etc lib media mnt opt root selinux sys tmp usr
Result: 0
Backticks получит вывод команды и не распечатает его:
[daniel@tux /]$ perl -e '$ls = `ls`; print "Result: $ls\n"'
Result: bin
boot
dev
etc
home
lib
и т.д...
Обновление: Если Вы хотите распечатать название команды, являющейся системой () 'd также, я думаю, что подход Rudd хорош. Повторенный здесь для консолидации:
sub execute {
my $cmd = shift;
print "$cmd\n";
system($cmd);
}
my $cmd = $ARGV[0];
execute($cmd);
Я не знаю ни о каком способе по умолчанию сделать это, но можно определить подпрограмму, чтобы сделать это для Вас:
sub execute {
my $cmd = shift;
print "$cmd\n";
system($cmd);
}
my $cmd = $ARGV[0];
execute($cmd);
И затем посмотрите его в действии:
pbook:~/foo rudd$ perl foo.pl ls
ls
file1 file2 foo.pl
Используйте открытый вместо этого. Затем можно получить вывод команды.
open(LS,"|ls");
print LS;
Вот обновленный, выполняются, который распечатает результаты и возвратит их:
sub execute {
my $cmd = shift;
print "$cmd\n";
my $ret = `$cmd`;
print $ret;
return $ret;
}
Другая техника для объединения с другими упомянутыми в ответах состоит в том, чтобы использовать tee
команда. Например:
open(F, "ls | tee /dev/tty |");
while (<F>) {
print length($_), "\n";
}
close(F);
Это оба распечатает файлы в текущем каталоге (в результате tee /dev/tty
) и также распечатайте продолжительность каждого чтения имени файла.
Хм, интересный, как различные люди отвечают на это различные пути. Это смотрит на меня как знак, и Daniel Fone интерпретировал его как желание видеть/управлять stdout команды (ни одно из их решений получают stderr fwiw). Я думаю, что Rudd стал ближе. Одно скручивание, которое Вы могли сделать на ответе Rudd, должно сверхобвинить созданный в системе () команда с Вашей собственной версией так, чтобы Вы не должны были бы переписывать существующий код для использования его выполнять () команду.
с помощью его выполняющихся () sub из сообщения Rudd, у Вас могло быть что-то вроде этого наверху Вашего кода:
if ($DEBUG) {
*{"CORE::GLOBAL::system"} = \&{"main::execute"};
}
Я думаю, что это будет работать, но я должен признать, что это - вуду, и это было некоторое время, так как я написал этот код. Вот код, который я написал несколько лет назад для прерывания системных вызовов на локальном (вызов пространства имен) или глобальный уровень во время загрузки модуля:
# importing into either the calling or global namespace _must_ be
# done from import(). Doing it elsewhere will not have desired results.
delete($opts{handle_system});
if ($do_system) {
if ($do_system eq 'local') {
*{"$callpkg\::system"} = \&{"$_package\::system"};
} else {
*{"CORE::GLOBAL::system"} = \&{"$_package\::system"};
}
}