python打开vbs文件,用python创建的参数执行vbs文件

I would like to convert dozens of excel sheets to csv files at once. I have a working .vbs file which makes the conversion, and I would like to execute this .vbs file on the different sheets with the help of a python code. I have the following 2 versions of the python code:

Version 1:

import os

import sys

import subprocess

FolderName=sys.argv[1]

FileList=os.listdir(FolderName)

NewList=[]

for i in FileList:

NewItem=i.split('.xls')

NewXls=FolderName+"\\"+NewItem[0]+".xlsx "

NewCsv=FolderName+"\\"+NewItem[0]+".csv"

NewCommand="C:\\Users\\user\\XlsToCsv.vbs "+sys.argv[2]+" "+NewXls+NewCsv

subprocess.call(NewCommand)

Version 2:

import os

import sys

import subprocess

def main(directory,extension,sheet):

for filename in os.listdir(directory):

if filename.endswith(extension):

path = os.path.join(directory, filename)

base = os.path.join(directory, filename[:len(filename)-len(extension)])

print base

new_xls = base + extension

new_csv = base + '.csv'

subprocess.call(['C:\\Users\\user\\XlsToCsv.vbs', sheet, new_xls, new_csv])

main(sys.argv[1],sys.argv[2],sys.argv[3])

It does not matter, which I try, I get the same error message:

Traceback (most recent call last):

File "C:/Users/user/Desktop/Work/XlsDir.py", line 16, in

subprocess.call(NewCommand)

File "C:\Python27\lib\subprocess.py", line 524, in call

return Popen(*popenargs, **kwargs).wait()

File "C:\Python27\lib\subprocess.py", line 711, in __init__

errread, errwrite)

File "C:\Python27\lib\subprocess.py", line 948, in _execute_child

startupinfo)

WindowsError: [Error 193] %1 er ikke et gyldigt Win32-program

The last line of the error message means approximately, that it is not a valid Win32-program.

What I have tried so far:

If I run the .vbs file from command prompt with the right arguments (sheet, name of the .xls file and name of the .csv file) then it works fine.

If I print the commands that python generates and copy them into command prompt, they work fine.

I tried every combinations of '\' and '\' within the different paths, and nothing got any better.

I tried to execute the programs with replacing the sys.argv[i] arguments with specific arguments and then execute the .py file from command prompt. I get the same error message.

I hope some of you can help me. Thanks a lot!

解决方案

To elaborate on Ansgar's remedy:

Starting a .vbs from the command line 'works', because the shell associates the extension .vbs with an application (e.g. cscript/wscript; see ftype, assoc, cscript //E, cescript //S).

subprocess.call() does not open a shell, so either specify the application (c|wscript.exe) or start the shell yourself:

import subprocess

#subprocess.call("notepad") # works

#subprocess.call("dir") # [Error 2] The system cannot find the file specified

# no shell, no intrinsics

#subprocess.call("19112944.vbs") # [Error 193] %1 is not a valid Win32 application

# no shell, can't associate .vbs with c|wscript.exe

subprocess.call("cscript 19112944.vbs") # works

subprocess.call("cmd /c 19112944.vbs") # works

# have shell, can associate .vbs with c|wscript.exe

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值