使用python创建的参数执行vbs文件

Rie*_*eux 5 python vbscript execute

我想一次将几十个excel表转换为csv文件.我有一个工作.vbs文件进行转换,我想借助python代码在不同的工作表上执行这个.vbs文件.我有以下2个版本的python代码:

版本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)
Run Code Online (Sandbox Code Playgroud)

版本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])
Run Code Online (Sandbox Code Playgroud)

没关系,我尝试了,我收到同样的错误信息:

 Traceback (most recent call last):
   File "C:/Users/user/Desktop/Work/XlsDir.py", line 16, in <module>
     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
Run Code Online (Sandbox Code Playgroud)

错误消息的最后一行意味着,它不是一个有效的Win32程序.

到目前为止我尝试了什么:

  • 如果我使用正确的参数(工作表,.xls文件的名称和.csv文件的名称)从命令提示符运行.vbs文件,那么它可以正常工作.
  • 如果我打印python生成的命令并将它们复制到命令提示符中,它们可以正常工作.
  • 我在不同的路径中尝试了'\'和'\'的每个组合,没有什么比这更好了.
  • 我尝试用特定参数替换sys.argv [i]参数来执行程序,然后从命令提示符执行.py文件.我收到相同的错误消息.

我希望你们中的一些人可以帮助我.非常感谢!

Ekk*_*ner 10

详细阐述安斯加的补救措施:

从命令行'works'开始.vbs,因为shell将扩展名.vbs与应用程序相关联(例如cscript/wscript;请参阅ftype,assoc,cscript // E,cescript // S).

subprocess.call()不打开shell,所以要么指定application(c|wscript.exe),要么自己启动shell:

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
Run Code Online (Sandbox Code Playgroud)


Ans*_*ers 6

尝试使用以下命令运行脚本cscript.exe

subprocess.call(['cscript.exe', 'C:\\Users\\user\\XlsToCsv.vbs', sheet, new_xls, new_csv])
Run Code Online (Sandbox Code Playgroud)