Вызов внешнего скрипта в matlab и захват вывода - PullRequest
1 голос
/ 13 марта 2012

Эй, у меня есть команда bash, которая выводит строку, основанную на чтении какого-либо файла.Скажем для простоты, это так:

for line in `cat file`
do
if [ "$line" == "IwantThisLine" ]
then   
echo "True"
fi
done

И я сохранил его как свой отдельный скрипт.Это называется readRef.sh.Так что теперь я хочу вызвать его в Matlab и сохранить все, что он выводит в переменной!Я не совсем уверен, как это сделать, я, кажется, получаю ошибку при использовании evalc () в system ().Но это может быть просто я испортил цитаты.

Я пробовал что-то вроде

evalc(system(['./readRef.sh ' bamfile']))

"bamfile" - это переменная, представляющая собой просто строку на пути к bamfile.

Я получаю эту ошибку.

>> tes = evalc(system(['./readRef.sh ' smplBamFile])) 
hg18 
??? Undefined function or method 'evalc' for input arguments of type 'double'.

По совпадению он выплевывает "hg18", что я и хочу установить для переменной matlab равной.

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

О, понятно.Я не думаю, что вам нужно evalc вообще.Читая system документы вы можете просто сделать:

[status, result] = system('echo True; echo "I got a loverly bunch of coconuts"')

И result будет

True
I got a loverly bunch of coconuts

Так что просто сделайте:

 [status, result] = system(['./readRef.sh ' smplBamFile])

Причина, по которой evalc не работает, заключается в том, что для его ввода требуется выражение Matlab в строке , но вы передаете ему результат system.

Вы можете попробовать:

 evalc("system(['./readRef.sh ' smplBamFile])")

Посмотрите, как я передаю system(...) в виде строки?

0 голосов
/ 13 марта 2012

Причина, по которой вы получаете эту ошибку, заключается в том, что system(...) возвращает код возврата команды, которую она выполнила, а не ее вывод. Чтобы захватить его вывод, используйте

[~, output] = system(...)
tes = evalc(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...