【问题标题】:Calling external script in matlab and capturing output在matlab中调用外部脚本并捕获输出
【发布时间】:2012-03-12 23:22:43
【问题描述】:

嘿,所以我有一个 bash 命令,它根据读取某个文件来回显一个字符串。简单来说就是这样的

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

我将它保存为自己的单独脚本。它称为 readRef.sh。所以现在我想在 matlab 中调用它并将它输出的任何内容存储在一个变量中!我不完全确定如何做到这一点,在 system() 上使用 evalc() 时似乎出现错误。但这可能只是我搞砸了报价。

我尝试了类似的东西

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 变量设置为的值。

【问题讨论】:

  • 那么,您能否提供您尝试运行脚本的evalc/system 命令以及随附的错误消息? (顺便说一句 - 当你从 bash 运行脚本时它本身是否工作(即sh ./readRef.sh?)你设置了可执行位吗?)
  • 看起来smplBamFile 可能不是字符串 - 你能做到class(['./readRef.sh ' smplBamFile])吗?
  • 我认为这个特定的文件在标题中没有引用,因为这就是我的脚本读取引用的方式,所以它什么也没有回应。所以当我单独运行它时,它返回 0。你认为这是为什么?
  • 如果我输入 evalc(0) 它会给我完全相同的错误。我很确定这是正在发生的事情。无论如何,让我们假装它没有给我一个错误。你还能帮我解决原来的问题吗?一个简单的例子就可以了,还是我已经做对了?

标签: bash matlab variables call


【解决方案1】:

哦,我明白了。我认为你根本不需要evalc。阅读system docs 你可以这样做:

[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(...) 作为字符串传递的?

【讨论】:

  • 是的,我已经尝试将 system(...) 作为字符串传递,但不幸的是,这给了我一个意外错误。我会试试你说的,让你知道,谢谢。
  • 如果您也尝试过将其作为字符串传递,那么请将该尝试和您的错误放在问题中。每当您提出问题时,请将所有您的尝试相关的错误消息放入其中 - 这将对试图帮助您的人有很大帮助,并防止他们错误识别你的问题不是它。
【解决方案2】:

您收到此错误的原因是因为system(...) 返回它运行的命令的返回码,而不是它的输出。要捕获其输出,请使用

[~, output] = system(...)
tes = evalc(output);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多