【问题标题】:Running .vbs scipt inside Python doesn't do anything在 Python 中运行 .vbs 脚本没有任何作用
【发布时间】:2017-03-18 20:47:23
【问题描述】:

想法

基本上,我的脚本所做的是检查 C:/SOURCE 中的 .txt 文件并为其添加时间戳。要复制它,您基本上可以创建该文件夹并将一些 txt 文件放在那里。然后,它应该运行一个 .vbs 文件,然后运行一个 .bat 文件,其中包含一些在这里无关紧要的 rclone 命令。我这样做是因为通过 .vbs 文件运行 rclone 命令时不会打开 CMD 窗口。

Python 代码

import time, os, subprocess

while True:
    print("Beginning checkup")
    print("=================")
    timestamp = time.strftime('%d_%m_%H_%M')  # only underscores: no naming issues
    the_dir = "C:/SOURCE"
    for fname in os.listdir(the_dir):
        if fname.lower().endswith(".txt"):
            print("found " + fname)
            time.sleep(0.1)
            new_name = "{}-{}.txt".format(os.path.splitext(fname)[0], timestamp)
            os.rename(os.path.join(the_dir, fname), os.path.join(the_dir, new_name))
            time.sleep(0.5)
    else:
        subprocess.call(['cscript.exe', "copy.vbs"])
        time.sleep(60)

VBScript 代码

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run Chr(34) & "copy.bat" & Chr(34), 0 
Set WshShell = Nothing 

Python 脚本唯一重要的部分是在最后一个 else 下方,subprocess.call() 应该运行 .vbs 文件。运行脚本时会发生什么,它会显示在运行 CMD 时总是出现的前两行,但随后什么也没有。

我该如何解决这个问题?我试过了:

subprocess.call("cscript copy.vbs")
subprocess.call("cmd /c copy.vbs")

两者都具有相同的结果,它什么都不做。

有人有想法吗?

【问题讨论】:

    标签: python vbscript automation


    【解决方案1】:

    为什么要调用 VBScript 来从 Python 调用批处理脚本?您应该能够直接从 Python 代码简单地运行批处理脚本正在执行的任何操作。但是,即使您想保留批处理脚本,在没有 VBScript 作为中介的情况下,这样的事情也应该可以正常工作。

    subprocess.call(['cmd', '/c', 'copy.bat'])
    

    不过,您可能希望提供批处理文件的完整路径,以避免出现工作目录不是您认为的那样的问题。

    如果您的批处理脚本与 Python 脚本位于同一目录中,则可以使用以下内容构建路径:

    import os
    import subprocess
    
    scriptdir = os.path.dirname(__file__)
    batchfile = os.path.join(scriptdir, 'copy.bat')
    
    subprocess.call(['cmd', '/c', os.path.realpath(batchfile)])
    

    【讨论】:

    • 我会这样做,如果它没有打开一个 cmd 窗口。将 vbs 文件放在中间的全部目的是使其对用户不可见。这就是我想要做的。
    • 哦,你是对的。 .bat 和 .vbs 文件的全部意义在于使其对用户不可见,但似乎可以直接从 python 中获取。感谢您的洞察力,真的没想到!
    【解决方案2】:

    似乎没有使用普通 Python 无法完成的操作。扫描一个目录,复制一个文件——Python 在标准库中拥有这一切。请参阅 os.pathshutil 模块。

    添加 VB 脚本和启动子进程会使您的代码复杂且难以调试。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多