加入从另一个 python 脚本调用 OSX 脚本并传递参数 join.py PDF



请记住,我对python很陌生。

我一直在尝试编写一个 python 脚本,该脚本除其他外,使用 OSX 中已经存在的 join.py Python 脚本(请参阅 https://apple.stackexchange.com/a/99218)来合并特定文件夹中的 pdf 文件。

此脚本的工作方式是提供以下参数:join.py -o OutputDir/Outputfilename InputDir/*.pdf在壳中时。 这将获取输入文件名的所有 pdf 并合并它们。我已经用 shell 脚本成功地做到了这一点,但试图用 python 运行它,我还没有设法让它抓住所有的 pdf,我尝试过的任何方式。它总是拒绝处理文件列表,只想要一个字符串。

我的最新脚本:

import sys
sys.path.insert(0, '/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/')
pdfInputDir = os.path.join (sortsdir, expTitle, "PDFs")
print(pdfInputDir)
pdfstomerge = []
for root, dirs, files in os.walk(pdfInputDir):
pdfstomerge += glob.glob(os.path.join(root, '*.pdf'))
print(pdfstomerge) #i verify the pdfs are the ones i want
from subprocess import call
call(["/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py", "-o", os.path.join(pdfInputDir, "output.pdf"), ''.join(map(str, pdfstomerge))])
###
###

每次我运行它时,我都会得到一个输出.pdf正确生成,它是空的。为了验证我正在做的事情是否正常工作,我将 *.pdf 与目录中的 pdf 文件名之一切换,它产生了一个输出.pdf该文件意味着我走在正确的轨道上,我只是想不出一种方法来为它提供所有必要的 pdf 而不是一个。

我不确定我做错了什么,特别是因为上述"命令"在终端中有效。我尝试了不同的方法,包括os.path.join(pdfInputDir, "*.pdf")、re'match 和 fnmatch,但没有一种奏效 - 我通常会收到以下错误:TypeError: Can't convert 'list' object to str implicitly(可能是我写错了)。

另外,我很确定我也许可以将其作为 python 模块运行,而不是使用子进程调用它,但后来我未能找到一种方法来"推送"其中所有必需的参数,所以我坚持使用 subprocess.call 方式。

关于如何为我的脚本正确提供这些参数的任何想法将不胜感激。

你能不能试试join(str(i) for i in pdfstomerge)而不是join(map(str,pdfstomerge)。

这应该可以解决您的查询:-)(希望如此)有好的一天!

try:
liststr = ','join(str(i) for i in pdfstomerge)
print(liststr)
except TypeError:
print(pdfstomerge) # to check what you have in the list of pdfs

此外,我不确定您是否必须在字符串中传递值,例如:

stringToCall = '[' + liststr + ']'

希望您能尽快找到解决方案。

最新更新