Python:无法使用 os.system() 打开文件

发布于 2024-10-15 14:36:22 字数 783 浏览 2 评论 0原文

我正在编写一个使用应用程序 pdftk a 的 Python 脚本几次执行某些操作。

例如,我可以在 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

为什么会发生这种情况?我该如何修复它?

请注意:我知道有更好的方法用 Python 合并 pdf 文件。我的问题不是关于合并 pdf 文件。那只是一个玩具示例。我想要实现的是使用 Python 执行 pdftk 和其他命令行应用程序的能力。

I'm coding a Python script which is using the application pdftk a few times to perform some operations.

For example, I can use pdftk in the windows command line shell to merge two pdf files like this:

pdftk 1.pdf 2.pdf cat output result.pdf

I would like to perform the above operation in the middle of my Python script. Here's how I tried doing it:

os.system('pdftk 1.pdf 2.pdf cat output result.pdf')

The above pdftk command works perfectly in the Windows shell. However, it fails to open the input files (1.pdf and 2.pdf) when I'm trying to execute it using Python's os.system(). Here's the error message I get from pdftk when trying to execute the command using Python's os.system():

Error: Failed to open PDF file:
1.pdf

Error: Failed to open PDF file:
2.pdf

Why does it happen? How can I fix it?

Please note: I know there are better ways to merge pdf files with Python. My question isn't about merging pdf files. That was just a toy example. What I'm trying to achieve is an ability to execute pdftk and other command line applications using Python.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浪荡不羁 2024-10-22 14:36:22

您可以使用 subprocess 避免引用、转义等(潜在的)问题:

import subprocess

subprocess.call(['pdftk', '1.pdf', '2.pdf', 'cat', 'output', 'result.pdf'])

它与 os.system 一样易于使用,如果您愿意,甚至会更容易动态构建参数列表。

You can avoid (potential) problems with quoting, escaping, and so on, with subprocess:

import subprocess

subprocess.call(['pdftk', '1.pdf', '2.pdf', 'cat', 'output', 'result.pdf'])

It's just as easy to use as os.system, and even easier if you are building the argument list dynamically.

苦妄 2024-10-22 14:36:22

您需要设置进程的当前工作目录。如果 .pdf 文件位于 /some/path/to/pdf/files/

>>> os.getcwd()
'/home/vz0'
>>> os.chdir('/some/path/to/pdf/files/')

You need to set the current working directory of the process. If the .pdf files are located at /some/path/to/pdf/files/:

>>> os.getcwd()
'/home/vz0'
>>> os.chdir('/some/path/to/pdf/files/')
喵星人汪星人 2024-10-22 14:36:22

确保您位于同一当前工作目录中。

我还发现使用 \\ 而不是 / 对我有帮助。

Make sure you are in the same current working directory.

Also I found using \\ instead of / helped me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文