错误说明
原先的程序代码:
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调用exe程序 传入参数_python运行带参数传入的exe文件
win32api
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容