win32api运行程序返回42,但是myTest.exe并没有运行

错误说明

原先的程序代码:

    import win32api
    import os
    import sys  
    
    myTest=  "D:\\bin\\myTest.exe"  
    outputfile =sys.argv[1]+"\\"
    if mdebug:
        print("case path:{0}".format(param))
        print("myTest.exe:{0}".format(convertSS))
    param ='"%s"' % (sys.argv[1]) + " " + '"%s"' % (sys.argv[2]) + " " + '"%s"' % (sys.argv[3])+ " " + '"%s"' % (sys.argv[4])    
    win32api.ShellExecute(0, 'open', myTest, param, '', 1)

问题很诡异!!!
原先是可以正常运行的,
重装了运行包,或者重装了win32api和python38环境之后,出现错误:

win32api.ShellExecute(0, ‘open’, myTest, param, ‘’, 1)
可以通过返回码为42,但是myTest.exe并没有运行。

解决方案

思路一 换成os.system()

os.system
python基础之os.system函数

import win32api
    import os
    import sys
     
    myTest = "D:\\bin data\\mytest.exe"    
    outputfile = sys.argv[1]+"\\"   
    param ='"%s"' % (sys.argv[1]) + " " + '"%s"' % (sys.argv[2]) + " " + '"%s"' % (sys.argv[3])+ " " + '"%s"' % (sys.argv[4])
   cmd = myTest+ " "+ param
   os.system(cmd)

如果myTest路径不包含空格,程序可以正常启动。
如果myTest路径包含空格,则command命令解析就会报错:

d:\bin 不是内部或外部命令,也不是可运行的程序或批处理文件

参考文章:os.system 打开程序,有空格 解决方法,改变cmd.exe的工作路径后问题解决:具体代码如下:

    import os
    import sys
  
    myTestpath ="D:\bin data"
    os.chdir(myTestpath)
    myTest ="myTest.exe"

    outputfile = sys.argv[1]+"\\"
   
    param ='"%s"' % (sys.argv[1]) + " " + '"%s"' % (sys.argv[2]) + " " + '"%s"' % (sys.argv[3])+ " " + '"%s"' % (sys.argv[4])
    cmd = myTest+ " " + param
    print(cmd)
    os.system(cmd)

关于 os.chdir()方法
参见:Python os.chdir() 方法

os.system()与win32api.ShellExecute()区别:
1.win32api是三方库,需要独立安装;os是python的基础库,可以直接导入使用;
2.os.system()在当前窗口直接运行命令;win32api会另外开启一个cmd.exe运行程序。

思路二

参考文献:

Python调用(运行)外部程序参数问题

python中3种调用可执行文件.exe的方法

在python程序中运行带参数的exe文件

python调用exe程序 传入参数_python运行带参数传入的exe文件

win32api

Win32中调用其他应用程序的方法(函数)winexec,shellexecute ,createprocess

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haimianjie2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值