大神前来:win32process.CreateProcess 调用 Windows 里面的 exe 文件执行后,如何获取 exe 执行的返回结果呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
520Python
V2EX    Python

大神前来:win32process.CreateProcess 调用 Windows 里面的 exe 文件执行后,如何获取 exe 执行的返回结果呢?

  •  
  •   520Python 2020-03-25 17:27:16 +08:00 3691 次点击
    这是一个创建于 2097 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如,我调用 cmd.exe 来执行“ipconfig”命令,如何才能获取到返回呢?

    例如:

    import win32process def main(): exePath = "cmd.exe" param = "ipconfig" param = exePath + " " + param handle = win32process.CreateProcess(exePath, param, None, None, 0, win32process.CREATE_NEW_CONSOLE, None, None, win32process.STARTUPINFO()) ''' 此处如何获取 handle 的返回结果?: D:\>ipconfig Windows IP 配置 以太网适配器 本地连接: 连接特定的 DNS 后缀 . . . . . . . : 本地链接 IPv6 地址. . . . . . . . : fe80::8...%11 IPv4 地址 . . . . . . . . . . . . : 192....1.3 子网掩码 . . . . . . . . . . . . : 255.2...5.0 默认网关. . . . . . . . . . . . . : fe80...11 19....1 ''' if '__main__' == __name__: main() 
    13 条回复    2020-03-26 14:31:07 +08:00
    zk8802
        1
    zk8802  
       2020-03-25 17:28:37 +08:00 via iPhone
    可以用 subprocess.Popen()。
    xiaolinjia
        2
    xiaolinjia  
       2020-03-25 17:30:19 +08:00
    不是
    import subprocess
    subprocess.call('ipconfig')
    就可以了么。
    520Python
        3
    520Python  
    OP
       2020-03-25 17:36:21 +08:00
    @xiaolinjia
    @zk8802
    谢谢!这两个我都试过,因为我在整 MongoDB 导入和导出,用到 mongoimport 和 mongoexport,命令里需要带很多参数,参数中有特殊字符,用这两个都报错,特殊字符转 URL 编码值也不好使。但是用 win32process.CreateProcess 执行命令没报错,所以才有现在的问题了,不能获取到输出。
    mingl0280
        4
    mingl0280  
       2020-03-25 17:55:57 +08:00 via Android
    CreateProcess 调完后(CreateProcess 有个很长的参数列表,最后一个是 PROCESS_INFO &pInfo)调 WaitForSingleObject(pInfo.hProcess),然后调 GetExitCodeProcess(pInfo.hProcess),wfso 和 gecp 参数你自己查一下 MSDN 。
    cz5424
        5
    cz5424  
       2020-03-25 18:31:53 +08:00 via iPhone
    直接通过 socket 接口获取信息不好吗?这个绕了一大圈
    jinsongzhao
        6
    jinsongzhao  
       2020-03-25 18:42:02 +08:00 via Android
    调用的进程通过什么方式返回,就用什么方式取。比如麻烦点的,创建进程时,参数结构体中提供一个标准输出句柄,调用进程通过 print 到标准输出 stdout 。还可以共享内存,可以文件,可以 socket
    hx1997
        8
    hx1997  
       2020-03-25 19:25:41 +08:00
    难道不是……管道吗…… CreateProcess 可以重定向输出的吧
    wnpllrzodiac
        9
    wnpllrzodiac  
       2020-03-25 20:04:00 +08:00 via Android
    管道,获取 ffmpeg 转码进度就是这么玩的。需要的可以祥询
    loginv2
        10
    loginv2  
       2020-03-25 20:11:46 +08:00
    管道重定向到本程序的标准输出
    ysc3839
        11
    ysc3839  
       2020-03-25 23:33:58 +08:00
    通过管道获取。
    不过既然用的是 Python,为什么不使用 Python 自带的跨平台的 subprocess 呢?会简单很多。
    ysc3839
        12
    ysc3839  
       2020-03-25 23:36:18 +08:00
    > 参数中有特殊字符,用这两个都报错
    估计你的代码设置了使用 shell 执行吧? shell 需要进行一些转义,尝试不要使用 shell 。
    g00001
        13
    g00001  
       2020-03-26 14:31:07 +08:00
    Python 跨平台有时候还是会有些负担,
    Windows 上用 aardio 搞这些东西就很容易,转义都自动处理,管道读写也简单。

    import win;
    import process.popen;

    var ipcOnfig= process.popen("ipconfig","/all");
    var str = ipconfig.read(-1);
    win.msgbox(str);
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1046 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:36 PVG 01:36 LAX 09:36 JFK 12:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86