用python代码creatprocess函数_从python kernel32.CreateProcessA中退出代码

博主在Python中使用kernel32.CreateProcessA尝试运行一个脚本并获取其退出码。尽管脚本返回-1,但通过kernel32.GetExitCodeProcess获取的退出码却是0。文章探讨了这个问题,寻求解决方案。
摘要由CSDN通过智能技术生成

我尝试使用kernel32.CreateProcessA在python中运行一个进程。下面是我的代码,运行的脚本只返回-1(因此名称为returns-1.py)。但是,当我访问退出代码值时(以我认为正确的方式),我得到0。我不明白如何访问返回码,它应该是-1。任何建议都将不胜感激。在from ctypes import *

HANDLE = c_void_p

LPVOID = c_void_p

DWORD = c_ulong

WORD = c_ushort

CHAR = c_char

ULONG = c_ulong

LPSTR = POINTER(CHAR)

BYTE = c_char

LPBYTE = POINTER(BYTE)

LPDWORD = POINTER(DWORD)

#http://msdn.microsoft.com/en-us/library/windows/desktop/ms684873(v=vs.85).aspx

class ProcessInfo(Structure):

_fields_ = [('hProcess', HANDLE),

('hThread', HANDLE),

('dwProcessId', DWORD),

('dwThreadId', DWORD),

]

#http://msdn.microsoft.com/en-us/library/windows/desktop/ms686331(v=vs.85).aspx

class StartupInfo(Structure):

_fields_ = [ ('cb', DWORD),

('lpReserved', LPSTR),

('lpDesktop', LPSTR),

('lpTitle', LPSTR),

('dwX', DWORD),

('dwY', DWORD),

('dwXSize', DWORD),

('dwYSize', DWORD),

('dwXCountChars', DWORD),

('dwYCountChars', DWORD),

('dwFillAttribute', DWORD),

('dwFlags', DWORD),

('wShowWindow', WORD),

('cbReserved2', WORD),

('lpReserved2', LPBYTE),

('hStdInput', HANDLE),

('hStdOutput', HANDLE),

('hStdError', HANDLE),

]

class ExitCodeProcess(Structure):

_fields_ = [ ('hProcess', HANDLE),

('lpExitCode', LPDWORD)]

pi = ProcessInfo()

si = StartupInfo()

#Running cmd in a new process

#http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx

success = kernel32.CreateProcessA(c_char_p(0),

c_char_p("python Returns-1.py"),

0,

0,

0,

1, #follow forks

0,

0,

byref(si),

byref(pi))

#CODE TO ACCESS RETURN CODE

c_long_p = POINTER(c_long)

ec = ExitCodeProcess()

success = kernel32.GetExitCodeProcess(pi.hProcess, byref(ec))

print "success is:", success #prints success is: 1

print str(cast(addressof(ec.lpExitCode), c_long_p).contents) #prints 'c_long(0)' not -1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值