我有一个python脚本,在控制台中运行时效果很好。但是,在使用pywin32它以使其作为服务运行时,服务将安装并开始正常,但不会生成所需的输出。所以必定会出现问题 - 但我无法看到发现原因的原因。

该脚本执行以下操作:在给定的输入目录中搜索* .csv文件

如果没有找到这样的文件,则等待1分钟。如果找到一个,则将其用作步骤3的输入。如果找到多个csv文件,则使用第一个。

对列的顺序进行一些转换

将转换后的内容写入输出csv

将输入csv移动到子目录中并重命名。

我先向您展示作为服务实现的版本的代码:#!/usr/bin/env python3

import sys

import os

import csv

from pathlib import Path

import time

import win32service

import win32serviceutil

import win32event

def reorder_AT_csv(ifile, ofile):

"Öffnet die CSV Datei, überführt sie in das neue Format und exportiert sie."

print('[i] Lese aus ' + ifile.name + ' und schreibe in ' +

ofile.name)

with open(

ifile, mode='r') as infile, open(

ofile, mode='w') as outfile:

reader = csv.DictReader(

infile,

fieldnames=[

'Post Nummer', 'Sendungsnummer', 'Referenz1', 'Referenz2',

'Gewicht', 'Empf.Name1', 'Empf.Adresse', 'Empf.PLZ',

'Empf.Ort', 'Kostenstelle', 'Produkt'

],

delimiter=';')

fn = [

'Post Nummer', 'Referenz1', 'Referenz2', 'Sendungsnummer',

'Gewicht', 'Empf.Name1', 'Empf.Adresse', 'Empf.PLZ', 'Empf.Ort',

'Kostenstelle', 'Produkt'

]

writer = csv.DictWriter(

outfile, extrasaction='ignore', fieldnames=fn, delimiter=';')

# reorder the header first

try:

for row in reader:

# writes the reordered rows to the new file

writer.writerow(row)

except Exception as e:

print('[!] Fehler bei der Bearbeitung der CSV Datei:')

print('[!] ' + str(e))

print(

'[!] Bitte ueberpruefen, ob es sich um eine korrekte CSV Datei handelt!'

)

sys.exit(1)

def checkInputFromUser(path):

"Überprüfe ob das Verzeichnis existiert."

if not path.exists():

print(

'[!] Die Eingabe ist kein Verzeichnis. Bitte ein gueltiges Verzeichnis eingeben.'

)

sys.exit(1)

return True

def findCSVFile(path):

"Finde alle CSV Dateien im Verzeichnis path."

all_files = []

all_files.extend(Path(path).glob('*.csv'))

if len(all_files) == 0:

# print('[!] Keine CSV Dateien gefunden. Bitte Pfad überprüfen.')

# sys.exit(1)

return None

elif len(all_files) > 1:

print('[i] Mehrere CSV Dateien gefunden. Nehme ersten Fund:')

return all_files[0]

def moveInputFile(input):

"Verschiebe Input Datei in Unterordner und füge Suffix hinzu."

movepath = Path(input.parent / 'processed')

targetname = input.with_suffix(input.suffix + '.success')

fulltarget = movepath / targetname.name

input.replace(fulltarget)

class CSVConvertSvc(win32serviceutil.ServiceFramework):

# you can NET START/STOP the service by the following name

_svc_name_ = "blub"

# this text shows up as the service name in the Service

# Control Manager (SCM)

_svc_display_name_ = "bar der AT CSV Dateien."

# this text shows up as the description in the SCM

_svc_description_ = "Dieser Dienst öffnet die AT CSV Datei und überführt sie in das DPD Format."

def __init__(self, args):

win32serviceutil.ServiceFramework.__init__(self, args)

# create an event to listen for stop requests on

self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)

# core logic of the service

def SvcDoRun(self):

import servicemanager

rc = None

inputpath = Path(r'C:\Users\Dennis\Documents')

outputpath = Path(r'C:\Users\Dennis\Desktop')

file = None

# if the stop event hasn't been fired keep looping

while rc != win32event.WAIT_OBJECT_0:

checkInputFromUser(inputpath)

while file is None:

file = findCSVFile(inputpath)

if file is None:

time.sleep(60)

inputfile = file

outputfile = outputpath / 'out.csv'

reorder_AT_csv(inputfile, outputfile)

moveInputFile(inputfile)

# block for 5 seconds and listen for a stop event

rc = win32event.WaitForSingleObject(self.hWaitStop, 5000)

# called when we're being shut down

def SvcStop(self):

# tell the SCM we're shutting down

self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)

# fire the stop event

win32event.SetEvent(self.hWaitStop)

if __name__ == '__main__':

win32serviceutil.HandleCommandLine(CSVConvertSvc)

这个版本没有做它应该做的事情。但是,我开始使用它可以作为非服务版本,而是一个简单的python脚本,它可以执行它应该执行的操作:#!/usr/bin/env python3

import sys

import os

import csv

import time

from pathlib import Path

def reorder_AT_csv(ifile, ofile):

"Öffnet die CSV Datei, überführt sie in das neue Format und exportiert sie."

print('[i] Lese aus ' + ifile.name + ' und schreibe in ' +

ofile.name)

with open(

ifile, mode='r') as infile, open(

ofile, mode='w') as outfile:

reader = csv.DictReader(

infile,

fieldnames=[

'Post Nummer', 'Sendungsnummer', 'Referenz1', 'Referenz2',

'Gewicht', 'Empf.Name1', 'Empf.Adresse', 'Empf.PLZ',

'Empf.Ort', 'Kostenstelle', 'Produkt'

],

delimiter=';')

fn = [

'Post Nummer', 'Referenz1', 'Referenz2', 'Sendungsnummer',

'Gewicht', 'Empf.Name1', 'Empf.Adresse', 'Empf.PLZ', 'Empf.Ort',

'Kostenstelle', 'Produkt'

]

writer = csv.DictWriter(

outfile, extrasaction='ignore', fieldnames=fn, delimiter=';')

# reorder the header first

try:

for row in reader:

# writes the reordered rows to the new file

writer.writerow(row)

except Exception as e:

print('[!] Fehler bei der Bearbeitung der CSV Datei:')

print('[!] ' + str(e))

print(

'[!] Bitte ueberpruefen, ob es sich um eine korrekte CSV Datei handelt!'

)

sys.exit(1)

def checkInputFromUser(path):

"Überprüfe ob das Verzeichnis existiert."

if not path.exists():

print(

'[!] Die Eingabe ist kein Verzeichnis. Bitte ein gueltiges Verzeichnis eingeben.'

)

sys.exit(1)

return True

def findCSVFile(path):

"Finde alle CSV Dateien im Verzeichnis path."

all_files = []

all_files.extend(Path(path).glob('*.csv'))

if len(all_files) == 0:

# print('[!] Keine CSV Dateien gefunden. Bitte Pfad überprüfen.')

# sys.exit(1)

return None

elif len(all_files) > 1:

print('[i] Mehrere CSV Dateien gefunden. Nehme ersten Fund:')

return all_files[0]

def moveInputFile(input):

movepath = Path(input.parent / 'processed')

targetname = input.with_suffix(input.suffix + '.success')

fulltarget = movepath / targetname.name

input.replace(fulltarget)

def main():

inputpath = Path(r'C:\Users\Dennis\Documents')

outputpath = Path(r'C:\Users\Dennis\Desktop')

file = None

checkInputFromUser(inputpath)

while file is None:

file = findCSVFile(inputpath)

if file is None:

time.sleep(60)

inputfile = file

outputfile = outputpath / 'out.csv'

reorder_AT_csv(inputfile, outputfile)

moveInputFile(inputfile)

if __name__ == '__main__':

main()

作为Python的新手,我无法弄清楚我缺少什么。该服务已正确安装,也可以顺利启动。我使用的是随pywin32 libs一起提供的ActiveState Python 3.6。

如何调试正在运行的python程序_如何调试作为服务运行的Python程序?相关推荐

  1. python无法在终端运行程序_解决项目pycharm能运行,在终端却无法运行的问题

    解决项目pycharm能运行,在终端却无法运行的问题 报 ModuleNotFoundError: No module named '****' 错误. 运行的文件夹又不在根目录下, 在python ...

  2. 简述python调试程序_简单调试 Python 程序

    在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.py): $ vi d.py #!/usr/bin/pytho ...

  3. python程序只能使用源代码进行运行、不能打包_中国大学MOOC计算机程序设计语言(Python)网课答案...

    中国大学MOOC计算机程序设计语言(Python)网课答案 表达式[3] in [1, 2, 3, 4]的值为________________. python 3.x语句 print(1, 2, 3, ...

  4. php运行python爬虫_群晖系统中运行python爬虫程序

    重要:本文最后更新于2021-01-28 17:02:43,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. 准备入手一台NAS,事先的学习是必须的,今天在VM虚拟机中安装好NAS后, ...

  5. 如何将c语言程序封装供python调用_转:用C语言扩展Python的功能

    一.简介 Python是一门功能强大的高级脚本语言,它的强大不仅表现在其自身的功能上,而且还表现在其良好的可扩展性上,正因如此,Python已经开始受到越来越多人的青睐,并且被屡屡成功地应用于各类大型 ...

  6. 用termux运行python代码_没有电脑?不能运行代码?试试用手机搞定

    今天就来介绍可以在手机和 iPad 上写代码的小工具. iOS 平台:Pythonista Pythonista 自带自动连接,方便移动端敲代码. Pythonista 里面内置一套库,让 Pytho ...

  7. python 新闻摘要_每日新闻摘要:Microsoft内部禁止应用程序,这样就可以了

    python 新闻摘要 Recently, a list of apps that Microsoft prohibits for internal employee use leaked, incl ...

  8. docker 运行windows程序_如何从Windows上运行任何Linux图形GUI程序?

    Win10上的wsl模式虽然解决了运行linux程序的痛点,然而所运行的程序依然受困于Terminal中.比如emacs: 终端版本的emacs 试图获得赏心悦目的视觉效果,比如优美的字体和图形,必须 ...

  9. python人才_【北软互联】上海python人才外派|上海python程序员人力外包|上海python工程师开发驻场|上海python软件劳务派遣公司...

    python人才简述 python是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此python语言具有功能强大和简单易用两个特征.python ...

  10. linux上开发应用程序_如何在Linux上安装软件应用程序

    linux上开发应用程序 如何在Linux上安装应用程序? 与许多操作系统一样,该问题不仅有一个答案. 应用程序可以来自许多来源-几乎无法计数-每个开发团队都可以以自己认为最佳的方式交付软件. 知道如 ...

最新文章

  1. 第七周项目一-成员函数(4)
  2. python【蓝桥杯vip练习题库】ALGO-91 Anagrams问题
  3. c语言构造体二维数组,怎么才能把结构体里面的二维数组打印出来?
  4. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)
  5. JEECG v3视频陆续更新
  6. android自带抓拍算法,Android | 超简单集成HMS ML Kit实现最大脸微笑抓拍
  7. java在线支付---04_编写易宝支付的客户端加密工具类
  8. 显示所有大写字母python_python 输出所有大小写字母的方法
  9. 最強御主人様!-Mighty My Master-全年龄汉化补丁(第二版修正)
  10. 八字 十二长生 详解
  11. 朋友python多个逻辑条件判断_Python小课笔记--Python控制流:if逻辑判断
  12. Lie to Me: Bypassing Modern Web Application Firewalls
  13. 梦断代码读后感 (一)
  14. mac m1上esc键失灵不能退出vi解决方法
  15. 系统之家xp服务器系统怎么安装,windowsxp系统之家系统详细安装步骤
  16. 提升研发效率的基本工作原则
  17. Flink 任务报错:flink FileNotFoundException: JAR file does not exist: -yn
  18. GMS特征点代码实践
  19. Deep3DBox论文精读
  20. 【Python3解析二维码】翻遍全网找到 2 款库推荐给大家~

热门文章

  1. 政务大数据服务安全能力要求分级方法
  2. Spring Boot 分层构建 Docker 镜像实战
  3. 华南师范计算机科学学院院长,曾碧卿教授 - 导师团队成员简介 - 华南师范大学软件学院...
  4. Eclipse修改项目名
  5. Java高级程序员面试经历
  6. 世界首度!ArtFin谈针对少儿的“艺术饭+”行动@版权猫ip猫ipMALL.io
  7. android 用户管理专题之基于oauth2协议的服务认证,基于Oauth2协议的客户端服务器的实现(简单实现)...
  8. 水果机抽奖(CocosCreator)
  9. php update语句,php中update语句用法介绍
  10. 读书笔记-《专业主义》的读后收获