Python 脚本在 IDLE 中执行时有效,但在控制台中无效

标签 python python-3.x windows

前言

系统操作系统:Windows 10

首先,我在 PATH 中有 python,所以这不是问题。其他脚本在控制台中工作正常。

<小时/>

Python 脚本的用途?

.csv文件中读取参数,并在.PDF中填写相应的注释字段

<小时/>

当脚本在Python的IDLE中执行时,会创建输出pdf文件。但是,从控制台打开脚本时不会创建 pdf 文件。

我认为它一定与当前工作目录和我的相对路径有关。这就是为什么我添加了这一行:

os.chdir(os.getcwd().replace(os.sep, '/'))

但是,这似乎没有帮助。

完整的 Python 脚本:

#! /usr/bin/python
import os , pdfrw , csv

INPUT_CSV_PATH = 'Tested_parameters.csv'
INVOICE_TEMPLATE_PATH = 'Input_template.pdf'
INVOICE_OUTPUT_PATH = 'output_document.pdf'
ANNOT_KEY = '/Annots'
ANNOT_FIELD_KEY = '/T'
ANNOT_FIELD_NAME = '/TU'
ANNOT_VAL_KEY = '/V'
ANNOT_RECT_KEY = '/Rect'
SUBTYPE_KEY = '/Subtype'
WIDGET_SUBTYPE_KEY = '/Widget'

def write_fillable_pdf(input_pdf_path, output_pdf_path, data_dict):
    template_pdf = pdfrw.PdfReader(input_pdf_path)
    annotations = template_pdf.pages[1][ANNOT_KEY]
    for annotation in annotations:
        if annotation[SUBTYPE_KEY] == WIDGET_SUBTYPE_KEY: # '/Subtype': '/Widget'
            if annotation[ANNOT_FIELD_KEY]: # '/T'
                key = annotation[ANNOT_FIELD_KEY][1:-1]
                if key in data_dict.keys():
                    if (key[0:4] == 'check'):
                        annotation.update( pdfrw.PdfDict( V=data_dict[key], AS=data_dict[key]) )        
                    else:
                        annotation.update( pdfrw.PdfDict(AP=data_dict[key], V=data_dict[key], F=0) )
    pdfrw.PdfWriter().write(output_pdf_path, template_pdf)

def Inport_csv_to_dict(input_pdf_path):
    with open(input_pdf_path,encoding="utf-8-sig") as fh:
        rd = csv.DictReader(fh, delimiter=',')
        for row in rd:
            data_dict = row
    return data_dict

if __name__ == '__main__':
    os.chdir(os.getcwd().replace(os.sep, '/'))
    data_dict = Inport_csv_to_dict(INPUT_CSV_PATH)
    write_fillable_pdf(INVOICE_TEMPLATE_PATH, INVOICE_OUTPUT_PATH, data_dict)

最佳答案

好吧,这对我来说有点愚蠢,但现在可以了。

我有#!/usr/bin/python 在我的脚本的第一行。因此控制台使用 python 2 运行脚本。

我删除了第一行,它按预期工作(使用 Python 3)

关于Python 脚本在 IDLE 中执行时有效,但在控制台中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59764129/

相关文章:

c++ - 在 C++ (windows) 中监控文件变化

linux - 如何将工作区(一个简单的项目)从 windows 文件系统 (/mnt/) 移动到 linux (~/home)

python - 如何在 Django 中编辑和删除数据?

python - 加速科学python程序

python - chat() 缺少 1 个必需的位置参数 : 'id'

python - 如何将单词字符串列表列表转换为字符串作为句子?

python - 需要范围分配的数组类型

windows - Win32 堆栈部分基地址

python - 使用 io.StringIO 模拟文件时的 Unicode 问题

Python 字典 - 将数组附加到字典中的特定键。