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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片