【发布时间】:2011-06-20 08:16:08
【问题描述】:
我正在编写一个 Python 脚本,它多次使用应用程序 pdftk 来执行一些操作。
例如,我可以在 windows 命令行 shell 中使用 pdftk 来合并两个 pdf 文件,如下所示:
pdftk 1.pdf 2.pdf cat output result.pdf
我想在我的 Python 脚本中间执行上述操作。以下是我尝试这样做的方法:
os.system('pdftk 1.pdf 2.pdf cat output result.pdf')
上述 pdftk 命令在 Windows shell 中完美运行。但是,当我尝试使用 Python 的os.system() 执行它时,它无法打开输入文件(1.pdf 和 2.pdf)。这是我在尝试使用 Python 的 os.system() 执行命令时从 pdftk 收到的错误消息:
错误:无法打开 PDF 文件: 1.pdf
错误:无法打开 PDF 文件: 2.pdf
为什么会这样?我该如何解决?
请注意:我知道有更好的方法可以将 pdf 文件与 Python 合并。我的问题不是关于合并 pdf 文件。那只是一个玩具例子。我想要实现的是使用 Python 执行 pdftk 和其他命令行应用程序的能力。
【问题讨论】:
-
几乎可以肯定是目录路径的问题。您可以从 `C:` 或任何位置传入完整路径,或者确保从正确的目录开始。
-
也可能是引用或shell变量插值问题。始终使用
subprocess模块而不是os.system以避免此类问题。 -
@chmullig:你真的觉得我有那么愚蠢吗?好吧,原来我是。这个问题确实是一个路径问题。请重复您在回答问题时所说的话,我会接受。谢谢。
-
@Philipp:能否请您扩展您对使用 subprocess 而不是 os.system 的评论?为什么?有什么不同?谢谢。
-
默认情况下,子进程不调用 shell [所以没有变量扩展等]。因此 shell 注入攻击失败了。