You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过pypsexec运行可执行文件后如何发送命令或数据?

解决方案

你当前使用的pypsexec库默认的run_executable是同步执行逻辑,启动远程程序时就会把传入的stdin一次性写入,程序执行完成才返回输出,本身不支持启动后动态发送输入。要实现该需求,可参考以下实现方式:

方法1:基于pypsexec的非阻塞调用改造

将run_executable的wait参数设为False,启动进程后会返回可操作的标准流管道对象,你就可以在进程运行过程中分次写入stdin数据,最后再等待进程执行完成获取输出。
修正后可运行的示例代码如下:

from pypsexec.client import Client
import time

c = Client("my_ip", username="myusername", password="mypassword")

c.connect()
try:
    c.create_service()
    # 启动进程时不等待执行完成,获取stdin/stdout/stderr管道
    process = c.run_executable("app.exe", wait=False)
    
    # 程序启动后可先执行其他逻辑,此处示例等待1秒确保程序初始化完成
    time.sleep(1)
    
    # 分次发送输入数据
    process.stdin.write(b'first-input\n')
    process.stdin.flush()
    # 中间可插入任意业务逻辑,等待程序处理完成后再发下一段输入
    time.sleep(2)
    process.stdin.write(b'second-input\n')
    process.stdin.flush()
    
    # 所有输入发送完成后关闭stdin,等待进程执行完成
    process.stdin.close()
    process.wait()
    
    # 读取最终输出
    stdout = process.stdout.read()
    stderr = process.stderr.read()
    rc = process.returncode
    print(stdout.decode('gbk')) # 中文Windows系统默认编码为gbk,可根据实际情况调整
finally:
    c.remove_service()
    c.disconnect()

注意:如果你的远程应用app.exe默认开启了标准输入全缓冲,可能需要修改应用代码在每次读取前强制刷新缓冲区,或者启动时添加禁用缓冲的参数(比如Python脚本可以加-u参数启动),否则会出现写入stdin后程序没有实时响应的问题。

方法2:切换到交互式远程执行工具

如果你需要频繁做交互式的远程进程控制,也可以改用impacket库的wmiexec或者smbexec模块,对交互式输入的支持更完善。

内容的提问来源于stack exchange,提问作者salt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 08:45:08