我正在尝试使用Python来处理一些使用Adobe Acrobat Reader填写和签名的PDF表单.
我试过了:
我可以继续寻找图书馆并尝试它们,但我希望有人已经有了这个有效的解决方案.
更新:根据史蒂文的回答,我调查了pdfminer,它很好地完成了这个工作.
from argparse import ArgumentParser
import pickle
import pprint
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdftypes import resolve1, PDFObjRef
def load_form(filename):
"""Load pdf form contents into a nested list of name/value tuples"""
with open(filename, 'rb') as file:
parser = PDFParser(file)
doc = PDFDocument()
parser.set_document(doc)
doc.set_parser(parser)
doc.initialize()
return [load_fields(resolve1(f)) for f in
resolve1(doc.catalog['AcroForm'])['Fields']]
def load_fields(field):
"""Recursively load form fields"""
form = field.get('Kids', None)
if form: …Run Code Online (Sandbox Code Playgroud) 我正在使用python 2.7,并尝试在自己的进程中运行一些CPU繁重的任务.我希望能够将消息发送回父进程,以使其了解进程的当前状态.多处理队列似乎是完美的,但我无法弄清楚如何让它工作.
所以,这是我的基本工作示例,减去队列的使用.
import multiprocessing as mp
import time
def f(x):
return x*x
def main():
pool = mp.Pool()
results = pool.imap_unordered(f, range(1, 6))
time.sleep(1)
print str(results.next())
pool.close()
pool.join()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我尝试过以几种方式传递Queue,并且它们收到错误消息"RuntimeError:Queue对象应该只通过继承在进程之间共享".这是我根据我发现的早期答案尝试的方法之一.(我在尝试使用Pool.map_async和Pool.imap时遇到同样的问题)
import multiprocessing as mp
import time
def f(args):
x = args[0]
q = args[1]
q.put(str(x))
time.sleep(0.1)
return x*x
def main():
q = mp.Queue()
pool = mp.Pool()
results = pool.imap_unordered(f, ([i, q] for i in range(1, 6)))
print str(q.get())
pool.close()
pool.join()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
最后,0适应方法(使其成为全局)不会生成任何消息,它只是锁定. …
我在Windows 7中运行两个stunnel实例,配置为侦听同一个端口,看起来它们都在同一端口上成功侦听(只使用socket()/ bind()/ listen()).两个实例似乎都成功通过所有调用,并且它们显示在netstat中:
C:\>netstat -ano | grep 8000
TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING 5828
TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING 5852
Run Code Online (Sandbox Code Playgroud)
第一个要监听的是获取所有传入的请求.
这与我的所有期望完全相反.(我当时希望让EADDRINUSE告诉我港口很忙.)所以....
我在Windows上使用python 2.7来使用dcraw和PIL自动执行批量RAW转换.
问题是我每次运行dcraw时都会打开一个Windows控制台(每隔几秒就会发生一次).如果我使用.py运行脚本它不那么烦人,因为它只打开主窗口,但我更愿意只呈现GUI.
我是这样介入的:
args = [this.dcraw] + shlex.split(DCRAW_OPTS) + [rawfile]
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE)
ppm_data, err = proc.communicate()
image = Image.open(StringIO.StringIO(ppm_data))
Run Code Online (Sandbox Code Playgroud)
感谢Ricardo Reyes
次要修订到配方,在2.7看来,你需要得到STARTF_USESHOWWINDOW来自_subprocess(您也可以使用pywin32,如果你想要的东西,可能有点不太容易发生变化),所以为后人:
suinfo = subprocess.STARTUPINFO()
suinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE, startupinfo=suinfo)
Run Code Online (Sandbox Code Playgroud)