账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    python编写的windows服务不能执行系统命令
    30
    0

    我写了一个WINDOWS程序,监控IP的某个端口的连接情况,如果直接生成EXE是可以运行的,但是当我打包成了服务文件后,运行时却所“句柄无效”,后面一句一句的调试,发现是下面的这个库文件,运行subprocess.Popen时报错了,我把netstat 这个命令改成了其他的命令如:dir之类的,也同样报错,不清楚是不是在WINDOWS服务中不能使用subprocess.Popen或者有其他的原因????
    望大侠帮助

    下面是其中调用到的的一个库文件

    import subprocess
    from Action.SYS.get import *
    class System:
        __get=None
        __OS=''
        def __init__(self):
            self.__get=get()
            self.__OS=self.__get.getOS()
    
        def serverListenByPort(self,address, port, netstatus="ESTABLISHED"):
            result = []
            statuspos=0
            if self.__OS=='Linux':
                subp = subprocess.Popen('netstat -ano | grep %s:%s' % (address, port), shell=True, stdout=subprocess.PIPE)
                statuspos=5
            if self.__OS=='Windows':
                subp = subprocess.Popen('netstat -ano | findstr %s:%s' % (address, port), shell=True, stdout=subprocess.PIPE)
                statuspos = 3
            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;
            return result
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 野谈 普通会员 1楼

      Python编写的Windows服务可能无法执行系统命令,这可能有以下几种原因:

      1. 编写的服务代码中存在错误:例如,使用了系统命令的不正确的语法,或者没有正确地传递参数。

      2. 操作系统不支持或限制了服务执行某些系统命令。

      3. 服务在启动后没有正确运行:可能由于服务没有正确地启动,或者在启动后没有正确地运行。

      4. 服务的服务程序错误:例如,服务程序中的代码有错误,或者服务程序没有正确地处理错误。

      解决这些问题的方法是:

      1. 仔细检查服务代码,确保所有使用的系统命令都是正确的。

      2. 如果服务在启动后没有运行,可能需要检查服务的启动脚本,确保它正确地启动了服务。

      3. 如果服务的问题是由于服务程序错误,可能需要修复或重新编写服务程序。

      4. 如果服务的问题是由于操作系统不支持或限制了服务执行某些系统命令,可能需要联系操作系统的技术支持。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部