作者: kukey-admin

  • 如何查看我的网站证书有效日期

    以前普通网站好像都不太需要弄ssl证书的,现在搞得啥网站都需要ssl证书了。不然浏览器就给你http链接上弄个“不安全”字样。

     

    使用 OpenSSL 命令:

    打开终端或命令行界面,并运行以下命令:

    openssl x509 -in /path/to/your/certificate.pem -text -noout

    /path/to/your/certificate.pem 替换为您的证书文件的实际路径。

    例如我为我的网站申请的证书自动存放在位/etc/letsencrypt/live/kuyour.top/文件夹里面:

    /etc/letsencrypt/live/kuyour.top/fullchain.pem

    /etc/letsencrypt/live/kuyour.top/privkey.pem

    查询我为我的网站申请的证书有效日期:

    openssl x509 -in /etc/letsencrypt/live/kuyour.top/fullchain.pem -text -noout

    你申请成功后会提示类似下面的文字:

    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/live/kuyour.top/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/live/kuyour.top/privkey.pem
       Your certificate will expire on 2025-01-28. To obtain a new or
       tweaked version of this certificate in the future, simply run
       certbot again. To non-interactively renew *all* of your
       certificates, run "certbot renew"
     - If you like Certbot, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le

     

     

  • 更换YUM源为阿里云

    由于CentOS 7的官方支持已于2024年6月30日结束,您可以考虑更换YUM源为阿里云,以解决无法连接到官方仓库的问题。以下是操作步骤:

    1. 备份并修改仓库配置文件
      • 首先,备份您的仓库配置文件:
        cd /etc/yum.repos.d/
        mv CentOS-SCLo-scl.repo CentOS-SCLo-scl.repo.bak
        mv CentOS-SCLo-scl-rh.repo CentOS-SCLo-scl-rh.repo.bak
      • 编辑备份的CentOS-SCLo-scl-rh.repo文件,将mirrorlist=注释掉,并将baseurl=取消注释,更改为阿里云的地址:
        vim CentOS-SCLo-scl-rh.repo.bak

        修改内容如下:

        [centos-sclo-rh]
        name=CentOS-7 - SCLo rh
        baseurl=https://mirrors.aliyun.com/centos/$releasever/SCLo/$basearch/rh
        gpgcheck=1
        enabled=1
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
    2. 启用仓库并更新缓存
      • 启用仓库:
        yum-config-manager --enable centos-sclo-rh
      • 清理缓存并更新:
        yum clean all
        yum makecache

    解决方案2:手动指定仓库地址

    如果上述方法不适用,您可以尝试手动指定仓库地址。编辑/etc/yum.repos.d/CentOS-SCLo-scl-rh.repo文件,将mirrorlist注释掉,并指定baseurl为阿里云的地址:

    vim /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo

    确保文件内容如下:

    [centos-sclo-rh]
    name=CentOS-7 - SCLo rh
    baseurl=https://mirrors.aliyun.com/centos/$releasever/SCLo/$basearch/rh
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

     

  • centos系统中的mysql系统用户

    如何确认Centos系统中是否存在mysql系统用户?

    如果你想查看名为mysql的Linux用户是否存在于你的CentOS系统中,你可以使用以下命令:

    1. 使用id命令
      id mysql

      这个命令会显示用户mysql的UID(用户ID),如果用户不存在,它会显示一个错误消息。

    2. 使用getent命令
      getent passwd mysql

      这个命令会列出所有名为mysql的系统用户的信息,包括他们的UID、GID(组ID)、家目录和登录shell。如果用户不存在,它会显示一个错误消息。

    3. 使用grep命令
      grep mysql /etc/passwd

      这个命令会在/etc/passwd文件中搜索名为mysql的用户条目。如果用户存在,它会显示该用户的详细信息;如果不存在,它不会显示任何内容。

    这些命令可以帮助你确定名为mysql的Linux用户是否存在于你的系统中。如果这些命令返回了用户的信息,那么这个用户就存在于系统中;如果返回了错误消息或没有任何输出,那么这个用户就不存在。

    如何登录Centos系统中的mysql系统用户?

    如果你想以mysql用户身份登录,你可以使用su(switch user)命令来切换到该用户。以下是具体的步骤:

    1. 使用su命令切换用户
      su - mysql

      这个命令会让你切换到mysql用户。如果你设置了mysql用户的密码,系统会提示你输入密码。

    2. 查看mysql用户的家目录: 在切换到mysql用户之前,你可能想查看该用户的家目录。你可以使用以下命令来查看:
      getent passwd mysql

      这个命令会显示mysql用户的密码文件条目,包括家目录路径。

    3. 使用su命令并指定家目录: 如果你知道mysql用户的家目录,你也可以使用-c选项来指定命令,例如:
      su - mysql -c 'echo $HOME'

      这将切换到mysql用户并打印出其家目录路径。

    请注意,出于安全考虑,mysql用户通常没有登录shell,或者其shell被设置为/sbin/nologin/bin/false,这意味着你不能通过sussh登录。这是为了确保数据库用户不能被用来作为常规用户登录系统,从而减少安全风险。

    如果你尝试切换到mysql用户时遇到问题,可能是因为mysql用户的账户被配置为不允许登录。在这种情况下,你需要检查/etc/passwd文件中mysql用户的条目,查看其shell设置是否允许登录。如果mysql用户的shell设置为/sbin/nologin/bin/false,则不能通过su命令登录。

     

    执行su – mysql提示This account is currently not available.

    确认mysql用户目录是否存在,不存在则创建一个,使用以下命令(如果你已获取root权限,下面的命令去掉sudo):

    sudo mkdir /home/mysql

    设置正确的权限,确保mysql用户的家目录权限设置正确。通常,家目录的权限应该是700(只有所有者有读写执行权限)(如果你已获取root权限,下面的命令去掉sudo)。

    sudo chown mysql:mysql /home/mysql
    sudo chmod 700 /home/mysql

    检查用户配置,看看/etc/passwd文件中mysql用户的配置,确保其家目录和shell设置正确。

    如果mysql用户的shell设置为/sbin/nologin/bin/false,您需要将其更改为一个有效的shell,如/bin/bash,如果您希望mysql用户能够登录。

    请根据您的系统配置和安全需求调整上述建议。如果您不确定如何操作,或者需要进一步的帮助,请咨询系统管理员或安全专家。

    如何修改Centos系统中mysql系统用户密码?

    在Linux系统中,root用户具有足够的权限来更改任何用户的密码,包括mysql用户。以下是步骤:

    打开终端: 打开你的Linux终端。

    使用passwd命令: 使用passwd命令后跟mysql用户名来更改密码。你需要有root权限才能执行此操作。

    su -  # 切换到root用户
    passwd mysql

    或者,如果你已经是root用户,可以直接运行:

    passwd mysql

    系统会提示你输入新的密码,输入后再次输入以确认。

    输入新密码: 当系统提示你输入新密码时,输入你想要的新密码,并在提示确认时再次输入相同的密码。

    请注意,更改系统用户的密码是一个敏感操作,应该谨慎进行。确保你输入的密码足够强大,以防止未经授权的访问。此外,如果你正在更改的是系统关键用户(如mysql)的密码,确保在更改密码后更新任何依赖此密码的服务配置。

    如何查询mysql系统用户是否允许登录?

    要查询mysql用户是否允许SSH登录,你需要查看该用户的账户配置,特别是其家目录和登录shell的设置。以下是具体步骤:

    1. 查看mysql用户的账户信息: 你可以使用getent命令来查看mysql用户的账户信息,包括其家目录和登录shell。
      getent passwd mysql

      如果输出中显示的shell是/sbin/nologin/bin/false,那么mysql用户被禁止SSH登录。如果显示的是其他shell路径(如/bin/bash),则理论上mysql用户可以SSH登录。

    2. 检查mysql用户的家目录: 如果getent命令的输出中家目录不存在或无法访问,那么即使mysql用户的shell设置允许登录,系统也会提示“无法更改到目录”的错误。你可以使用以下命令来检查家目录是否存在:
      ls -ld /home/mysql

      如果目录不存在或无法访问,你需要创建或修复家目录,并确保其权限设置正确(如果你已获取root权限,下面的命令去掉sudo):

      sudo mkdir -p /home/mysql
      sudo chown mysql:mysql /home/mysql
      sudo chmod 700 /home/mysql
    3. 查看SSH配置: 检查SSH配置文件/etc/ssh/sshd_config,确认没有设置阻止mysql用户登录的规则,如DenyUsersAllowUsers指令。
    4. 查看SELinux状态: 如果SELinux启用,它可能会阻止mysql用户SSH登录。你可以使用以下命令查看SELinux的状态:
      getenforce

      如果SELinux是Enforcing状态,你可能需要调整SELinux策略或临时设置SELinux为宽容模式进行测试:

      setenforce 0

    通过上述步骤,你可以确定mysql用户是否被允许SSH登录。如果mysql用户的shell设置为不允许登录,或者家目录不存在,你需要进行相应的配置更改。

    要解决mysql用户被禁止SSH登录的问题,检查mysql用户的shell设置: 使用getent passwd mysql命令查看mysql用户的账户信息,特别是其登录shell。如果显示的shell是/sbin/nologin/bin/false,则mysql用户被禁止SSH登录。你需要更改此设置为一个有效的shell,比如/bin/bash

    如何解锁Centos系统中mysql系统用户?

    如果账户被锁定,你可以使用 usermod 命令来解锁账户(如果你已获取root权限,下面的命令去掉sudo):

    sudo usermod -U 用户名

    如果用户的Shell设置为不允许登录,你可以更改它为一个有效的Shell(如果你已获取root权限,下面的命令去掉sudo):

    sudo usermod -s /bin/bash 用户名

    检查账户过期信息

    使用 chage 命令查看账户的过期信息(如果你已获取root权限,下面的命令去掉sudo):

    sudo chage -l 用户名

    如果账户已过期,你可以使用以下命令重置过期日期(如果你已获取root权限,下面的命令去掉sudo):

    sudo chage -E 99999 用户名

    这将把账户的过期日期设置为 “99999”,实际上意味着账户永不过期。

    请根据实际情况选择合适的解决方案,并确保你有足够的权限来执行这些操作。如果你不确定如何操作,或者需要进一步的帮助,请咨询系统管理员。

    如何锁定Centos系统中的mysql系统用户?

    方法1:使用usermod命令锁定用户

    您可以使用usermod命令的-L选项来锁定用户账户。这将禁止用户登录,无论是通过SSH还是其他方式。以下是具体的命令(如果你已获取root权限,下面的命令去掉sudo):

    sudo usermod -L mysql

    这个命令会将mysql用户的账户锁定,使其无法登录。如果需要解锁,可以使用-U选项(如果你已获取root权限,下面的命令去掉sudo):

    sudo usermod -U mysql

    方法2:使用passwd命令锁定用户

    另一种锁定用户的方法是通过passwd命令将用户的密码状态设置为锁定。以下是具体的命令(如果你已获取root权限,下面的命令去掉sudo):

    sudo passwd -l mysql

    这个命令会锁定mysql用户的密码,使其无法通过密码验证登录系统。如果需要解锁,可以使用-u选项(如果你已获取root权限,下面的命令去掉sudo):

    sudo passwd -u mysql

    这两种方法都可以在不修改PAM配置的情况下锁定系统用户。您可以根据实际情况选择适合的方法来锁定mysql用户。

    如何修改centos中mysql系统用户密码?

    在Linux系统中,如果你需要修改mysql用户的密码,你可以使用passwd命令来更改密码。以下是具体的步骤:

    1. 切换到root用户: 如果你不是以root用户身份登录的,你需要先切换到root用户:
      bash
      su -

      输入root用户的密码。

    2. 更改mysql用户密码: 使用passwd命令来更改mysql用户的密码:
      bash
      passwd mysql

      系统会提示你输入新的密码,输入后再次输入以确认。

    请注意,更改系统用户的密码是一个敏感操作,应该谨慎进行。确保你输入的密码足够强大,以防止未经授权的访问。

     

    若果您已经确认了SELinux是禁用的(getenforce执行结果是Disabled),并且/home/mysql目录存在,

    “This account is currently not available.”的问题可能是由于mysql用户的登录Shell设置为不允许登录的Shell导致的。

    可以更改它为一个有效的Shell,比如/bin/bash。使用以下命令来更改(如果你以获取root权限,下面的命令去掉sudo):

    sudo usermod -s /bin/bash mysql

    这个命令会将mysql用户的登录Shell更改为/bin/bash,使其能够登录。

    更改Shell设置后,您可以再次尝试使用su - mysql命令来切换到mysql用户。

    出现-bash-4.2$提示就是登录成功了。

    -bash-4.2$是bash shell的提示符,表明您现在处于mysql用户的命令行界面中,并且bash版本为4.2。$符号表示您现在是以普通用户身份登录,如果是#则表示以root用户身份登录。

    如果您完成了操作,想要退出mysql用户的shell,可以使用以下命令:

    exit

    或者简单地输入logout

  • 给root用户查询mysql数据库的权限,并且能够给其他用户授权查询mysql数据库的权限

    如果你想要给root用户查询mysql数据库的权限,并且允许root用户将这个权限授予给其他用户,你可以使用以下SQL命令:

    GRANT SELECT ON mysql.* TO 'root'@'localhost' WITH GRANT OPTION; 
    flush privileges;

     

    这条命令的含义如下:

    • GRANT SELECT:授予查询(SELECT)权限。
    • ON mysql.*:指定这些权限仅适用于mysql数据库中的所有表。
    • TO 'root'@'localhost':指定被授予权限的用户是root,并且这个root用户可以从本地主机(localhost)连接。
    • WITH GRANT OPTION:允许root用户将其权限授予给其他用户。

    执行这个命令后,root用户将能够查询mysql数据库中的所有表,并且可以将查询权限授予给其他用户。

    请确保在执行这些操作时,你具有足够的权限,并且了解这些操作可能带来的安全风险。在生产环境中,建议谨慎操作,并且仅在必要时授予权限。

  • kill掉mysql相关的所有进程

    在Linux系统中,如果你需要杀死所有与MySQL相关的进程,你可以使用pkillkillall命令,这些命令可以根据进程名称来匹配并终止进程。以下是如何执行这个操作的步骤:

    1. 使用pkill命令:
      pkill -u mysql

      这个命令会杀死所有属于用户mysql的进程。通常MySQL进程是以mysql用户运行的,所以这个命令会杀死所有MySQL相关的进程。

    2. 使用killall命令:
      killall -u mysql

      这个命令同样会杀死所有属于用户mysql的进程。

    3. 如果你想要更精确地只杀死MySQL服务的进程,可以使用pgrepkill组合命令:
      pgrep -u mysql -f mysqld | xargs kill

      这个命令会找到所有包含mysqld的进程(MySQL服务的主要进程),并发送终止信号。

    警告:在执行这些命令之前,请确保你了解这些命令的后果。杀死MySQL相关的所有进程可能会导致数据库服务中断,正在进行的事务可能会被中断,可能会导致数据丢失或损坏。在执行这些操作之前,最好确保数据库已经备份,并且你有足够的权限和理由来执行这些操作。

    如果你只是想重启MySQL服务,而不是杀死所有进程,你可以使用系统的服务管理命令,例如在Systemd系统中:

    sudo systemctl restart mysqld

    或者在较老的系统中使用:

    sudo service mysql restart

    这些命令会安全地重启MySQL服务,而不会丢失任何数据。

  • .pyc文件对程序性能提升有多大?

    .pyc 文件对程序性能的提升主要体现在以下几个方面:

    1. 加快程序加载速度.pyc 文件是预编译的字节码,Python 解释器可以直接加载它,避免了每次运行时重新编译源代码的过程。这可以减少程序的启动时间,特别是在大型项目中,如果有大量的 .py 文件,使用 .pyc 文件可以显著减少程序启动时间
    2. 减少解释器的编译负担:使用 .pyc 文件可以减轻 Python 解释器的编译负担,因为不需要每次都对 .py 文件进行编译
    3. 提高运行效率.pyc 文件是一个可执行的字节码文件,目的是节省 Python 解析器翻译时间,从而提高运行效率。虽然性能提升可能只是一点点,但对于大型项目来说,节省的时间会更多一些
    4. 保护源代码:发布程序时,只提供 .pyc 文件可以有效隐藏源代码,防止他人查看或修改,这在一定程度上也减少了代码被篡改的风险,从而可能间接提高程序的稳定性和安全性

    总的来说,.pyc 文件对程序性能的提升主要体现在加快程序加载速度和减少解释器编译负担上,对于大型项目或者频繁启动的程序,这种性能提升会更加明显。然而,对于单次执行的小型脚本,这种性能提升可能不太显著。

  • .pyc是啥文件?如何执行.pyc文件

    .pyc 文件是 Python 程序的编译文件,它是 Python 源代码(.py 文件)的字节码版本。.pyc 文件通常由 Python 解释器在需要时自动生成,用于提高程序的加载速度,因为从 .pyc 文件加载代码比从 .py 文件编译代码要快。

    执行 .pyc 文件的方法如下:

    1. 直接执行.pyc 文件可以直接被 Python 解释器执行。你只需要在命令行中使用 Python 解释器,然后指定 .pyc 文件的路径即可。例如:
      python your_script.pyc

      或者如果你使用的是 Python 3.x 版本,可能需要使用:

      python3 your_script.pyc
    2. 使用 import 语句: 你也可以在 Python 程序中使用 import 语句来导入 .pyc 文件,就像导入普通的 .py 文件一样。例如:
      import your_script
    3. 使用 exec 函数: 如果你有一个 .pyc 文件的路径,可以使用 exec 函数来执行其中的代码。例如:
      with open('your_script.pyc', 'rb') as file:
          exec(file.read())

    请注意,.pyc 文件是针对特定版本的 Python 解释器生成的,这意味着它们可能不兼容不同版本的 Python。此外,出于安全考虑,.pyc 文件不应该从不可信任的来源执行,因为它们可能包含恶意代码。

  • python创建一个隐藏的后台进程,用于执行指定更换WIn10桌面背景图片的脚本

    任务管理器是看不到的,使用Process Explorer可以查看到这个进程。

    要使用ShellExecuteEx来启动进程,你需要从shell32库导入这个函数,并定义相应的结构体和参数。以下是如何在你的代码中使用ShellExecuteEx来替代CreateProcess的示例:

    首先,你需要定义SHELLEXECUTEINFO结构体,并设置适当的参数。然后,使用ShellExecuteEx函数来启动进程。

    步骤1: 定义SHELLEXECUTEINFO结构体

    import ctypes
    from ctypes import wintypes
    from ctypes.wintypes import DWORD, HANDLE, BOOL, WORD
    
    # 定义 SECURITY_ATTRIBUTES 结构体
    class SECURITY_ATTRIBUTES(ctypes.Structure):
        _fields_ = [
            ("nLength", wintypes.DWORD),
            ("lpSecurityDescriptor", wintypes.LPVOID),
            ("bInheritHandle", wintypes.BOOL),
        ]
    
    # 定义 SHELLEXECUTEINFO 结构体
    class SHELLEXECUTEINFO(ctypes.Structure):
        _fields_ = [
            ("cbSize", wintypes.UINT),
            ("fMask", wintypes.UINT),
            ("hwnd", wintypes.HWND),
            ("lpVerb", wintypes.LPCWSTR),
            ("lpFile", wintypes.LPCWSTR),
            ("lpParameters", wintypes.LPCWSTR),
            ("lpDirectory", wintypes.LPCWSTR),
            ("nShow", wintypes.INT),
            ("hInstApp", wintypes.HINSTANCE),
            ("lpIDList", wintypes.LPVOID),
            ("lpClass", wintypes.LPCWSTR),
            ("hkeyClass", wintypes.HKEY),
            ("dwHotKey", wintypes.DWORD),
            ("hIcon", wintypes.HANDLE),
            ("hProcess", wintypes.HANDLE),
        ]

    步骤2: 加载shell32库并定义ShellExecuteEx函数

    # 加载 shell32 库
    shell32 = ctypes.WinDLL('shell32', use_last_error=True)
    
    # 定义 ShellExecuteEx 函数
    ShellExecuteEx = shell32.ShellExecuteExW
    ShellExecuteEx.argtypes = [
        ctypes.POINTER(SHELLEXECUTEINFO),
    ]
    ShellExecuteEx.restype = wintypes.BOOL

    步骤3: 准备参数并调用ShellExecuteEx

    # 设置命令和参数
    src = r"C:\Users\rkey\Desktop\测试\更换桌面壁纸\change_wallpaper.py"
    command = f"cmd.exe /c python {src}"
    
    # 初始化 SHELLEXECUTEINFO 结构体
    sei = SHELLEXECUTEINFO()
    sei.cbSize = ctypes.sizeof(SHELLEXECUTEINFO)
    sei.fMask = 0x00000040  # SEE_MASK_NOCLOSEPROCESS
    sei.hwnd = None
    sei.lpVerb = None  # 不使用动词
    sei.lpFile = "cmd.exe"
    sei.lpParameters = f"/c {command}"
    sei.lpDirectory = None
    sei.nShow = 0  # SW_HIDE
    sei.hInstApp = 0
    
    # 调用 ShellExecuteEx
    if ShellExecuteEx(ctypes.byref(sei)):
        print("Process created successfully.")
    else:
        print("Failed to create process. Error code:", ctypes.get_last_error())
    
    # 等待进程结束
    # kernel32.WaitForSingleObject(sei.hProcess, -1)
    # 关闭进程句柄
    # kernel32.CloseHandle(sei.hProcess)

     

    注意事项
    错误处理:添加错误处理代码,以便在命令执行失败时获取更多信息。
    进程句柄:ShellExecuteEx函数执行后,sei.hProcess将包含新创建的进程的句柄。你可以使用这个句柄来等待进程结束或关闭句柄。
    这样,你就可以使用ShellExecuteEx来启动一个后台进程,而不会挂起。

     

    完整代码:

    import ctypes
    from ctypes import wintypes
    from ctypes.wintypes import DWORD, HANDLE, BOOL, WORD
    
    # 定义 SHELLEXECUTEINFO 结构体
    class SHELLEXECUTEINFO(ctypes.Structure):
        _fields_ = [
            ("cbSize", wintypes.UINT),
            ("fMask", wintypes.UINT),
            ("hwnd", wintypes.HWND),
            ("lpVerb", wintypes.LPCWSTR),
            ("lpFile", wintypes.LPCWSTR),
            ("lpParameters", wintypes.LPCWSTR),
            ("lpDirectory", wintypes.LPCWSTR),
            ("nShow", wintypes.INT),
            ("hInstApp", wintypes.HINSTANCE),
            ("lpIDList", wintypes.LPVOID),
            ("lpClass", wintypes.LPCWSTR),
            ("hkeyClass", wintypes.HKEY),
            ("dwHotKey", wintypes.DWORD),
            ("hIcon", wintypes.HANDLE),
            ("hProcess", wintypes.HANDLE),
        ]
    
    # 加载 shell32 库
    shell32 = ctypes.WinDLL('shell32', use_last_error=True)
    
    # 定义 ShellExecuteEx 函数
    ShellExecuteEx = shell32.ShellExecuteExW
    ShellExecuteEx.argtypes = [
        ctypes.POINTER(SHELLEXECUTEINFO),
    ]
    ShellExecuteEx.restype = wintypes.BOOL
    
    # 设置命令和参数
    src = r"C:\Users\rkey\Desktop\测试\更换桌面壁纸\change_wallpaper.py"
    command = f"cmd.exe /c python {src}"
    
    # 初始化 SHELLEXECUTEINFO 结构体
    sei = SHELLEXECUTEINFO()
    sei.cbSize = ctypes.sizeof(SHELLEXECUTEINFO)
    sei.fMask = 0x00000040  # SEE_MASK_NOCLOSEPROCESS
    sei.hwnd = None
    sei.lpVerb = None  # 不使用动词
    sei.lpFile = "cmd.exe"
    sei.lpParameters = f"/c {command}"
    sei.lpDirectory = None
    sei.nShow = 0  # SW_HIDE
    sei.hInstApp = 0
    
    # 调用 ShellExecuteEx
    if ShellExecuteEx(ctypes.byref(sei)):
        print("Process created successfully.")
    else:
        print("Failed to create process. Error code:", ctypes.get_last_error())
    
    # 等待进程结束
    # kernel32.WaitForSingleObject(sei.hProcess, -1)
    # 关闭进程句柄
    # kernel32.CloseHandle(sei.hProcess)

     

  • python打印多个当前安装的模块的版本

    modules = ["pywin32", "pandas", "matplotlib"]  # 替换为你要检查的模块名
    
    for module_name in modules:
        try:
            version = pkg_resources.get_distribution(module_name).version
            print(f"{module_name} version: {version}")
        except pkg_resources.DistributionNotFound:
            print(f"{module_name} is not installed.")

     

  • python指定一个文件夹的图片每10秒替换一次桌面图片

    pywin32库版本308

    import os
    import time
    import win32con
    import win32gui
    
    def set_wallpaper(image_path):
        # 设置桌面壁纸
        win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, image_path, win32con.SPIF_UPDATEINIFILE | win32con.SPIF_SENDCHANGE)
    
    def change_wallpaper_every_10_seconds(folder_path):
        # 获取文件夹中所有图片文件的路径
        image_files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith(('.jpg', '.jpeg', '.png', '.bmp'))]
        if not image_files:
            print("No image files found in the folder.")
            return
    
        # 循环更换壁纸
        while True:
            for image_file in image_files:
                set_wallpaper(image_file)
                print(f"Wallpaper changed to: {image_file}")
                time.sleep(10)  # 等待10秒
    
    # 设置图片文件夹路径
    folder_path = r"C:\Users\rkey\Pictures\Screenshots"  # 替换为你的图片文件夹路径
    change_wallpaper_every_10_seconds(folder_path)