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

时间:2017-06-08 08:31:18

标签: python macos pdf

请记住我对python很新。

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

此脚本的工作方式是提供以下参数: 在shell中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))])
###
###

每次运行它都会得到一个正确生成的output.pdf,它是空的。为了验证我正在做的是什么工作,我已经将* .pdf与目录中的一个pdf文件名切换,并且它已经生成了一个带有该文件的output.pdf,这意味着我在正确的轨道上,我只是可以找出一种方法来为它提供所有必要的pdf而不是一个。

我不知道自己出错了什么,特别是因为上面的“命令”在终端中有效。我尝试了不同的方法,包括os.path.join(pdfInputDir, "*.pdf"),re'match和fnmatch,但没有一个工作 - 我通常会在这些方面得到一个错误: TypeError: Can't convert 'list' object to str implicitly  (可能是我写错了)。

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

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

1 个答案:

答案 0 :(得分:1)

你可以尝试加入(str(i)for i in pdfstomerge)而不是join(map(str,pdfstomerge))。

这应该可以解决您的疑问:-)(希望如此)祝您有愉快的一天!

 SELECT DISTINCT
                             p_Resources.Empl_ID as EmployeeId
                            ,p_Resources.cRole
                            ,p_Empl.ID as Id
                            ,p_Empl.Title
                            ,p_Empl.First_Name as FirstName
                            ,p_Empl.MI as MiddleInitial
                            ,p_Empl.Last_Name as LastName
                            ,p_Empl.Phone
                            ,p_Empl.PWD as Password
                            ,p_Empl.email as Email
                            ,p_Empl.LoginName
                            ,p_Empl.Admin
                      FROM   p_Empl
                         LEFT OUTER JOIN
                          p_Resources on p_Resources.Empl_ID = p_Empl.ID
                     WHERE  p_Resources.cRole='Project Manager' 

另外我不确定你是否必须在字符串中传递值:

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

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