python句柄无效_python编写的windows服务不能执行系统命令

proc = subprocess.Popen(args,shell=True,stdout=open(outimploc, 'w'), stderr=open(outimplocerr,'w'),stdin = subprocess.PIPE, cwd=self.tranusConf.workingDirectory).communicate()

原来要这样处理,不会报错winerror 6

import subprocess

from Action.SYS.get import *

from Action.SYS.Log import *

from Action.File.FileEvent import *

import os

class System:

__get=None

__OS=''

__file=None

def __init__(self):

self.__get=get()

self.__OS=self.__get.getOS()

self.__file=FileEvent()

def serverListenByPort(self,address, port, netstatus="ESTABLISHED"):

result = []

statuspos=0

if self.__OS=='Linux':

subp = subprocess.Popen('netstat -ano | grep %s:%s' % (address, port), stdout=subprocess.PIPE)

statuspos=5

while True:

buff = subp.stdout.readline()

buff = str(buff, encoding='utf-8')

buffers = buff.split()

try:

if str(buffers[statuspos]).strip() == netstatus:

buffers.append(self.__OS)

result.append(buffers)

except Exception as e:

pass

if buff == '' or buff == None:

break;

if self.__OS=='Windows':

try:

outimploc = self.__file.get_dir() + '/out.txt';

outimplocerr = self.__file.get_dir() + '/error.txt';

tranusConf = self.__file.get_dir()

subp = subprocess.Popen('netstat -ano', stdout=open(outimploc, 'w'), stderr=open(outimplocerr, 'w'),stdin=subprocess.PIPE, cwd=tranusConf).communicate()

statuspos = 3

try:

f = open(outimploc, 'r')

while True:

line=''

try:

line = f.readline()

linsplit = str(line).strip().split()

if linsplit[1].strip() == '%s:%s' % (str(address).strip(),str(port).strip()):

if linsplit[3].strip()==netstatus:

linsplit.append(self.__OS)

result.append(linsplit)

except Exception as e:

Log.log('error', str(e))

if line == '' or line == None:

break;

f.close()

except Exception as e:

Log.log('error', str(e))

except Exception as e:

Log.log('error',str(e))

return result

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值