Python:无法使用 os.system() 打开文件
我正在编写一个使用应用程序 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.pdfError: 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用
subprocess
避免引用、转义等(潜在的)问题:它与
os.system
一样易于使用,如果您愿意,甚至会更容易动态构建参数列表。You can avoid (potential) problems with quoting, escaping, and so on, with
subprocess
:It's just as easy to use as
os.system
, and even easier if you are building the argument list dynamically.您需要设置进程的当前工作目录。如果 .pdf 文件位于
/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/
:确保您位于同一当前工作目录中。
我还发现使用
\\
而不是/
对我有帮助。Make sure you are in the same current working directory.
Also I found using
\\
instead of/
helped me.