Python 巧用Popen和SteamCMD特性实现自动化

Python 巧用Popen和SteamCMD特性实现自动化

明确下载步骤:

打开steamcmd.exe ——> login anonymous (匿名登录) ——> workshop_download_item gameID modID (下载对应模组) ——> quit (退出)

根据这篇文章:Steam 控制台客户端 - Valve Developer Community (valvesoftware.com)
可知:想要在命令行执行多条命令只需在其前面加“+”即可

以上文发现为基础

from subprocess import Popen

currentPopen = Popen(
                f'../steamcmd/steamcmd +login anonymous +workshop_download_item {gameID} {id} +quit',
                encoding='utf-8',
                stdin=PIPE,
                stdout=PIPE,
            )

此时该如何知道模组下载成功呢?
通过对steamcmd的观察了解,可知下载成功:默认在***'steamcmd / steamapps / workshop / content’文件夹下生成gameID / modID的文件夹名
所以只需在进程执行完毕后
检查文件夹路径是否存在*即可

以下是代码为大致原理:

from os.path import exists,normpath

# BASEPATH 项目根目录 
BASEMODINSTALL = '/steamcmd/steamapps/workshop/content'
while True:
    sleep(0.6)
    if currentPopen.poll() == 0: # Popen.poll() 正在运行返回 None	执行完毕返回 0	
        modPath = normpath(f'/{gameID}/{id}')
        if exists(BASEPATH + BASEMODINSTALL + modPath):
            print('下载成功')
        else:
            print('下载失败')
        break

由于while会阻塞线程,可以通过多线程解决

from threading import Thread

def downloading(game_id,mod_id):
    ......
    
downloadingThread = Thread(target=downloading,arg=(gameID,modID,),daemon=True)
downloadingThread.start()

值得注意点是 Popen 在程序打包成exe时,会显示的弹出黑色命令行
解决方法:向Popen传入 creationflags=0x08000000 参数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值