【问题标题】:Cant call PDFtk from Matlab, but can from terminal不能从 Matlab 调用 PDFtk,但可以从终端调用
【发布时间】:2014-01-24 06:43:28
【问题描述】:

由于某种原因,当我尝试从 Matlab (pdftk *.pdf cat output combFile.pdf) 调用 PDFtk 时,我收到 /bin/bash: pdftk: command not found 错误,但我可以在同一目录中的终端中运行相同的命令而没有问题。我已经重新启动了我的系统,但这似乎没有帮助。我正在运行Mac OSX 10.9.1Matlab 2013b。我不想使用 PDFtk 的绝对路径,因为它需要跨平台兼容。

编辑:这可能会有所帮助。当我在 Matlab 中回显 $PATH 时,我得到 /usr/bin:/bin:/usr/sbin:/sbin。当我在终端中执行此操作时,我得到/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin。然后我做了which pdftk,它返回了/usr/local/bin/pdftk 无论如何要将/usr/local/bin/ 路径添加到Matlab?

【问题讨论】:

  • 你能贴出你用来从 Matlab 调用 PDFtk 的代码吗?
  • 没错,是system('pdftk myfig[0-9][0-9].pdf cat output myfigCombined.pdf');

标签: macos bash matlab terminal pdftk


【解决方案1】:

我相信导出 PATH 的想法对于单个系统可能会更好(注意:我还没有测试过),但是我需要在我无法控制的多台 Mac 和 Linux 机器上使用我的脚本。这就是我最终使用的(是的,我知道这会在 Windows 上中断,但没关系)

if(ismac)
    system('/usr/local/bin/pdftk myfig[0-9][0-9].pdf cat output myfigCombined.pdf');
else
    system('/usr/bin/pdftk myfig[0-9][0-9].pdf cat output myfigCombined.pdf');
end

最初,我将if(isunix) 用于第二个命令,但可能是因为 Mac 的 unix 架构,两个命令都在执行。

编辑:我能够在 Linux 上对其进行测试,并且运行良好。我想这将是 Windows 的语法,但我无法访问安装了 PDFtk 和 Matlab 的 Windows 机器,所以不能保证(另外,我不确定我是否正确使用了路径引号......):

elseif (ispc)
    system('"C:\Program Files (x86)\PDFtk Server\bin\pdftk" myfig[0-9][0-9].pdf cat output myfigCombined.pdf');

【讨论】:

    【解决方案2】:

    您的 $PATH 环境变量似乎没有导出到 Matlab。阅读 http://www.mathworks.com/matlabcentral/newsreader/view_thread/255609 我建议添加一个

    export PATH=$PATH:<Path-to-your-PDFtk-binary>
    

    在您的 .bash_profile 中

    【讨论】:

    • 根据链接应该放在MATLAB/bin/matlab。显然,当他从 shell 执行它时,它正在被加载到 bash 启动文件中(除非它有别名或奇怪的东西)。
    • 我认为这可能会奏效,但此脚本需要在至少 4 台不受我控制的计算机(Mac 和 Linux)上运行。我也考虑过指定完整路径,但对于 Mac (/usr/local/bin) 和 Linux (/usr/bin) 是不同的。
    猜你喜欢
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多