GVKun编程网logo

作为Windows服务运行的Python:OSError:[WinError 6]句柄无效

15

本文将带您了解关于作为Windows服务运行的Python:OSError:[WinError6]句柄无效的新内容,另外,我们还将为您提供关于CELERYWindowsError:句柄无效、Cherr

本文将带您了解关于作为Windows服务运行的Python:OSError:[WinError 6]句柄无效的新内容,另外,我们还将为您提供关于CELERY WindowsError:句柄无效、CherryPy作为Windows服务 – 示例、OSError:提供了一个无效的参数 – Windows 10 Python、PyCharm多处理错误:OSError:[Errno 22]无效的参数,PermissionError:[WinError 5]访问被拒绝的实用信息。

本文目录一览:

作为Windows服务运行的Python:OSError:[WinError 6]句柄无效

作为Windows服务运行的Python:OSError:[WinError 6]句柄无效

我有一个Python脚本,它作为Windows服务运行。该脚本通过以下方式派生另一个进程:

with subprocess.Popen( args=[self.exec_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) as proc:

导致以下错误:

OSError: [WinError 6] The handle is invalid   File "C:\Program Files (x86)\Python35-32\lib\subprocess.py", line 911, in __init__   File "C:\Program Files (x86)\Python35-32\lib\subprocess.py", line 1117, in _get_handles

答案1

小编典典

1117行输入subprocess.py为:

p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)

这使我怀疑服务流程没有与之关联的STDIN(TBC)

通过提供文件或空设备作为stdin参数,可以避免这种麻烦的代码popen

Python 3.x中 ,您可以简单地通过stdin=subprocess.DEVNULL。例如

subprocess.Popen( args=[self.exec_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.DEVNULL)

Python 2.x中 ,您需要将文件处理程序设置为null,然后将其传递给popen:

devnull = open(os.devnull, ''wb'')subprocess.Popen( args=[self.exec_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=devnull)

CELERY WindowsError:句柄无效

CELERY WindowsError:句柄无效

我是新的芹菜,我正在按照他们的网站上给出的教程,我得到了这个错误

from celery import Celery app = Celery('tasks',broker='pyamqp://guest@localhost//') @app.task def add(x,y): return x + y

和CMD显示这样的错误

-------------- celery@DESKTOP-O90R45G v4.0.2 (latentcall) ---- **** ----- --- * *** * -- Windows-10-10.0.14393 2016-12-16 20:05:48 -- * - **** --- - ** ---------- [config] - ** ---------- .> app: tasks:0x4591950 - ** ---------- .> transport: amqp://guest:**@localhost:5672// - ** ---------- .> results: disabled:// - *** --- * --- .> concurrency: 4 (prefork) -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) --- ***** ----- -------------- [queues] .> celery exchange=celery(direct) key=celery [tasks] . tasks.add [2016-12-16 20:05:49,029: CRITICAL/MainProcess] Unrecoverable error: TypeError('argument 1 must be an integer,not _subprocess_handle',) Traceback (most recent call last): File "c:python27libsite-packagesceleryworkerworker.py",line 203,in start self.blueprint.start(self) File "c:python27libsite-packagescelerybootsteps.py",line 119,in start step.start(parent) File "c:python27libsite-packagescelerybootsteps.py",line 370,in start return self.obj.start() File "c:python27libsite-packagesceleryconcurrencybase.py",line 131,in start self.on_start() File "c:python27libsite-packagesceleryconcurrencyprefork.py",line 112,in on_start **self.options) File "c:python27libsite-packagesbilliardpool.py",line 1008,in __init__ self._create_worker_process(i) File "c:python27libsite-packagesbilliardpool.py",line 1117,in _create_worker_process w.start() File "c:python27libsite-packagesbilliardprocess.py",line 122,in start self._popen = self._Popen(self) File "c:python27libsite-packagesbilliardcontext.py",line 383,in _Popen return Popen(process_obj) File "c:python27libsite-packagesbilliardpopen_spawn_win32.py",line 64,in __init__ _winapi.CloseHandle(ht) TypeError: argument 1 must be an integer,not _subprocess_handle Traceback (most recent call last): File "<string>",line 1,in <module> File "c:python27libsite-packagesbilliardspawn.py",line 159,in spawn_main new_handle = steal_handle(parent_pid,pipe_handle) File "c:python27libsite-packagesbilliardreduction.py",line 126,in steal_handle _winapi.DUPLICATE_SAME_ACCESS | _winapi.DUPLICATE_CLOSE_SOURCE) >WindowsError: [Error 6] The handle is invalid

如何获得在芹菜失败的任务?

uwsgi:什么定义了Django应用程序需要的工作者/进程的数量?

如何创build芹菜Windows服务?

Django芹菜socket.error:连接被拒绝

芹菜任务超时/窗口的时间限制?

芹菜错误:result.get超时

作为根源运行芹菜

Celery + Django:无法在Windows 7上启动celerybeat

芹菜花安全生产

在Windows上安装Airflow

看起来你的rabbitmq服务器没有运行。 你运行安装并启动rabbimq服务器?

您可以签出rabbitmq文档并安装它 。 启动rabbitmq服务器,然后用你的应用程序启动你的芹菜工作者

celery worker -l info -A tasks

自4.0版以来,Celery不再支持Windows,请参阅: http : //docs.celeryproject.org/en/latest/whatsnew-4.0.html#removed-features

不幸的是,这个bug似乎是副作用之一(支持删除进程句柄)

你最好的选择是降级芹菜,先把它删除: pip install celery==3.1.18

CherryPy作为Windows服务 – 示例

CherryPy作为Windows服务 – 示例

我见过不less人为此而苦恼 – 我也有问题。 如果有人能够帮助CherryPy服务的例子工作,这将是一个很大的帮助。 解释这些问题将不胜感激。

有一个CherryPy作为一个Windows服务的例子可以在: CherryPy Wiki 。 我正在努力使其工作。 这是我的代码:

""" The most basic (working) CherryPy 3.0 Windows service possible. Requires Mark Hammond's pywin32 package. """ import cherrypy import win32serviceutil import win32service import win32event import servicemanager class HelloWorld: """ Sample request handler class. """ def index(self): return "Hello World!" index.exposed = True class MyService(win32serviceutil.ServiceFramework): """NT Service.""" _svc_name_ = "CherryPyService" _svc_display_name_ = "CherryPy Service" def __init__(self,args): win32serviceutil.ServiceFramework.__init__(self,args) # create an event that SvcDoRun can wait on and SvcStop # can set. self.stop_event = win32event.CreateEvent(None,None) def SvcDoRun(self): self.ReportServiceStatus(win32service.SERVICE_START_PENDING) servicemanager.LogMsg(servicemanager.EVENTLOG_informatION_TYPE,servicemanager.PYS_SERVICE_STARTED,(self._svc_name_,'')) cherrypy.tree.mount(HelloWorld(),'/') # in practice,you will want to specify a value for # log.error_file below or in your config file. If you # use a config file,be sure to use an absolute path to # it,as you can't be assured what path your service # will run in. cherrypy.config.update({ 'global':{ 'engine.autoreload.on': False,'log.screen': False,'log.error_file': 'c:\MG\temp\CherryPy_Sample_Service.log','engine.SIGHUP': None,'engine.SIGTERM': None } }) # set blocking=False so that start() does not block cherrypy.server.quickstart() cherrypy.engine.start(blocking=False) # Now,block until our event is set... win32event.WaitForSingleObject(self.stop_event,win32event.INFINITE) self.ReportServiceStatus(win32service.SERVICE_RUNNING) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) cherrypy.server.stop() win32event.SetEvent(self.stop_event) if __name__ == '__main__': win32serviceutil.HandleCommandLine(MyService)

以上不同于链接的例子。 我已经添加

self.ReportServiceStatus(win32service.SERVICE_START_PENDING)和

self.ReportServiceStatus(win32service.SERVICE_RUNNING)作为self.ReportServiceStatus(win32service.SERVICE_RUNNING)第一个和最后一个语句

'log.error_file': 'c:\MG\temp\CherryPy_Sample_Service.log',如wiki指示

重要说明 :虽然可以使用控制台python cherrypy_sample_service.py install来安装服务,但是不可能使用python cherrypy_sample_service.py start命令来启动它。 原因是,这种方式创build的服务将引用python可执行文件,这不是作为服务devise的。

JNA Windows服务启动types

使用WIX向参数注册Windows服务

与MEF集成的Autofac

tcp错误代码10060调用WCF服务

在Windows服务中更改事件日志

因此,为了进一步testing,我使用以下代码编译了代码:

from cx_Freeze import setup,Executable exe = Executable( script='cherrypy_sample_service.py' ) build_options = {'includes': ['cherrypy','win32serviceutil','win32service','win32event','servicemanager']} setup( name = "CherryPy Sample Service",version = "0.1",service = ["cherrypy_sample_service.py"],options = {"build_exe" : build_options},executables = [exe])

在构build期间,我收到以下警告:

Python27Applibdistutilsdist.py:267: UserWarning: UnkNown distribution option: 'service' warnings.warn(msg)

我已经根据下面的堆栈问题答案添加了这个选项。

现在我可以调用cherrypy_sample_service install , cherrypy_sample_service remove和cherrypy_sample_service update 。 然而,试图运行服务(无论是从服务或通过cherrypy_sample_service start )导致以下错误:

Error starting service: The service did not respond to the start or control request in a timely fashion.

而我卡住了。 日志文件甚至没有创build。 你能帮我做个例子吗? 如果我们能够解释和运行一个例子,我想这对其他人在处理相关问题时也是有用的。 谢谢!

batch file检查系统服务是否正在运行

Apache的服务PHP的exec不工作

在Windows服务中运行100多个线程是否很好?

从服务的执行线程执行命令行

python服务员作为一个Windows服务

我刚刚从你提到的维基页面上获得了3.1版本,并且马上就能正常工作。 即它从命令行安装,启动和停止,因为它从服务管理GUI启动和停止。

""" The most basic (working) CherryPy 3.1 Windows service possible. Requires Mark Hammond's pywin32 package. """ import cherrypy import win32serviceutil import win32service class HelloWorld: """ Sample request handler class. """ @cherrypy.expose def index(self): return "Hello World!" class MyService(win32serviceutil.ServiceFramework): """NT Service.""" _svc_name_ = "CherryPyService" _svc_display_name_ = "CherryPy Service" def SvcDoRun(self): cherrypy.tree.mount(HelloWorld(),as you can't be assured what path your service # will run in. cherrypy.config.update({ 'global':{ 'log.screen': False,'engine.autoreload.on': False,'engine.SIGTERM': None } }) cherrypy.engine.start() cherrypy.engine.block() def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) cherrypy.engine.exit() self.ReportServiceStatus(win32service.SERVICE_STOPPED) # very important for use with py2exe # otherwise the Service Controller never kNows that it is stopped ! if __name__ == '__main__': win32serviceutil.HandleCommandLine(MyService)

测试环境是:XP SP3,Python 2.7.5,CherryPy 3.3,0,pywin32 218.4。

调试技巧

不需要构建二进制文件来运行您的服务。 当您从源代码安装pywin32服务时,它使用%PYDIR%Libsite-packageswin32pythonservice.exe作为服务代理。 即所有的服务都有它作为运行命令行,有REG:HKEY_LOCAL_MACHInesYstemCurrentControlSetServicesCherryPyServicePythonClass定义服务的实际Python类。

从命令行运行pythonservice.exe ,并确保它运行没有错误( 1 )。 您可能还会注意到,有一个调试选项可以让您将服务的stdout和stderr附加到终端( 2 )。

确保没有阻止pythonservice.exe从网络活动的防火墙软件。

最后,我找到了解决方案 – 我已经下载并重新安装pywin32 …一切工作完全正常!

OSError:提供了一个无效的参数 – Windows 10 Python

OSError:提供了一个无效的参数 – Windows 10 Python

我目前正在学习python,来自java,并偶然发现一个错误,我找不到答案。 我在Windows 10上使用最新的Python版本,但我认为我所遵循的教程是为了Linux …希望你仍然可以帮助我。 这是我的类代码:

def main(): connection = socket.socket(socket.AF_INET,socket.soCK_RAW,socket.IPPROTO_IP) #mainloop raw_data,addr = connection.recvfrom(65536) dest_mac,src_mac,eth_proto,data = ethernet_frame(raw_data) print('nEthernet Frame:') print('Destination: {},Source: {},Protocol: {}'.format(dest_mac,eth_proto)) #unpack ethernet frame def ethernet_frame(data): dest_mac,proto = struct.unpack('! 6s 6s H',data[:14]) return get_mac_addr(dest_mac),get_mac_addr(src_mac),socket.htons(proto),data[14:] #format MAC adress def get_mac_addr(bytes_addr): bytes_str = map('{:02x}'.format,bytes_addr) return ':'.join(bytes_str).upper() main()

执行时,我收到以下错误:

OSError: [WinError 10022] An invalid argument was supplied

与“connection.recvfrom(65536)”一致。

无论如何,很快就要用Linux获得一个虚拟机,我是否应该等待,还是有Windows的好解决scheme呢?

提高性能(包括某种故障转移)的最佳方式

searchWindows 7中的PHP文件的内容

在Win7x64,Ruby 2.0,MysqL 5.6上的gem MysqL2分段错误

请帮助:IPython在Windows上的Emacs崩溃

IIS 7.5 – 403禁止

把一个Pythonpath在Windows机器上

Windows Server 2012上的Windowsapp store应用

如何分割string与CMD

如何改变在c + +中的活动桌面壁纸

创build一个虚拟分区

套接字在绑定或数据发送之前没有地址。 在使用connection.bind((YOUR_IP,PORT))调用connection.recvfrom(65536)之前绑定套接字。

PyCharm多处理错误:OSError:[Errno 22]无效的参数,PermissionError:[WinError 5]访问被拒绝

PyCharm多处理错误:OSError:[Errno 22]无效的参数,PermissionError:[WinError 5]访问被拒绝

发现此问题已为PyCharm开发人员所知,正在等待修复:

https://youtrack.jetbrains.com/issue/PY-36151?_ga=2.215165010.494317185.1602845769-2057238290.1555425748

关于作为Windows服务运行的Python:OSError:[WinError 6]句柄无效的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于CELERY WindowsError:句柄无效、CherryPy作为Windows服务 – 示例、OSError:提供了一个无效的参数 – Windows 10 Python、PyCharm多处理错误:OSError:[Errno 22]无效的参数,PermissionError:[WinError 5]访问被拒绝的相关知识,请在本站寻找。

本文标签: