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

6 浏览
0 Comments

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

我想一次将几十个Excel表格转换为CSV文件。我有一个工作的.vbs文件可以进行转换,我想通过Python代码来执行这个.vbs文件来处理不同的表格。我有以下两个版本的Python代码:\n版本1:\n

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)

\n版本2:\n

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])

\n无论我尝试哪个版本,都会出现相同的错误信息:\n

 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

\n错误信息的最后一行大致意思是,这不是一个有效的Win32程序。\n我尝试过的方法:\n

    \n

  • 如果我在命令提示符中使用正确的参数(sheet、.xls文件名和.csv文件名)运行.vbs文件,它可以正常工作。
  • \n

  • 如果我打印Python生成的命令并将其复制到命令提示符中,它们也可以正常工作。
  • \n

  • 我尝试了所有不同路径中\'\\\'和\'\\\'的组合,但没有任何改善。
  • \n

  • 我试图用具体的参数替换sys.argv[i]参数并从命令提示符中执行.py文件。我得到了相同的错误信息。
  • \n

\n希望能有人能帮助我。非常感谢!

0
0 Comments

问题的原因是需要使用Python执行一个带有参数的vbs文件。解决方法是使用subprocess模块中的call方法来调用cscript.exe运行vbs文件,并传递参数。

具体代码如下:

import subprocess
sheet = 'Sheet1'
new_xls = 'C:\\Users\\user\\new.xls'
new_csv = 'C:\\Users\\user\\new.csv'
subprocess.call(['cscript.exe', 'C:\\Users\\user\\XlsToCsv.vbs', sheet, new_xls, new_csv])

这段代码中,subprocess.call方法接收一个列表参数,列表的第一个元素是cscript.exe,表示使用cscript.exe来执行vbs文件。列表的后续元素是vbs文件的路径和需要传递的参数。

通过使用cscript.exe来运行vbs文件,并传递参数,可以解决执行带有参数的vbs文件的问题。

0
0 Comments

问题出现的原因是subprocess.call()函数无法打开一个shell,所以无法关联.vbs扩展名的应用程序。解决方法是要么指定应用程序(例如cscript/wscript),要么手动启动shell。

以下是解决问题的代码示例:

import subprocess
# 使用cscript运行.vbs文件
subprocess.call("cscript 19112944.vbs") # 正常工作
# 使用cmd命令运行.vbs文件
subprocess.call("cmd /c 19112944.vbs") # 正常工作

另一种理论上的解决方法是使用comtypes库的.CreateObject()方法创建一个MSScriptControl对象,然后使用.AddCode()方法添加一些VBScript代码,并使用.Run()方法运行它们。然而,在实践中这种方法不起作用,因为comtypes库没有下载和支持,并且只支持32位系统。

感谢Ekkehard提供的回答。有没有一种方法可以在命令行界面之外使用Python创建的参数执行一个.vbs文件?

0