【问题标题】:PYTHON AND BATCH SCRIPT: Run file if it exists and create if it doesn'tPYTHON 和批处理脚本:如果文件存在则运行文件,如果不存在则创建
【发布时间】:2020-08-13 15:03:44
【问题描述】:

完全免责声明:我不知道 PYTHON。

大家好,
我为我的音量键制作了一个 AutoHotKey 脚本。我想创建一个运行 python 文件的批处理文件(所以如果我更换计算机,我可以轻松创建这个脚本),它将执行以下操作

  1. 检查D盘是否存在volume_keys.ahk
  2. 如果存在,运行它;
  3. 如果不存在,则创建一个名为 volume_keys.ahk 的文件并将我的脚本添加到其中。

我的脚本是:

^!NumpadMult::Send  {Volume_Mute}
^!NumpadAdd::Send   {Volume_Up}
^!NumpadSub::Send   {Volume_Down} 

我知道如何编写 .bat 文件,只需要有关 python 观点的帮助,但我要求社区检查它:

@ECHO OFF
ECHO This script will run an AHK Script. If you want to stop this process from happening, then cross this window off.If you want to continye:
pause
cd d:
D:\run_volume_keys_ahk_script.py

非常感谢社区提供的任何帮助。
提前致谢

【问题讨论】:

    标签: python batch-file automation autohotkey


    【解决方案1】:

    您可以为此使用os 库。这是 python 程序的样子。

    import os
    
    if os.path.isfile('D:\\volume_keys.ahk'): # check if it exists
        os.system('D:\\volume_keys.ahk') # execute it
    else:
        with open('D:\\volume_keys.ahk', 'w') as f: # open it in w (write) mode
            f.write('^!NumpadMult::Send  {Volume_Mute} \
    ^!NumpadAdd::Send   {Volume_Up} \
    ^!NumpadSub::Send   {Volume_Down}') # Write to file
        os.system('D:\\volume_keys.ahk') # execute
    

    【讨论】:

      【解决方案2】:

      要激活 ahk 脚本,您可能需要使用subprocess 模块,我以here 为例

      import subprocess
      subprocess.call(["path/to/ahk.exe", "script.ahk"])
      

      请注意,您必须先在计算机上找到 ahk 可执行文件,然后才能使用该脚本,也许您也想自动检查它。

      您可以在一个字符串中设置要检查脚本的路径,然后将脚本的文件名作为字符串添加到列表中。您可以使用os 模块中的listdir() 查看给定路径中的任何文件和目录,然后遍历您的脚本名并检查它是否存在于该文件列表中。如果是,请运行它。

      在此示例中,我将您的脚本复制粘贴到一个字符串中,作为字典中键“scriptname”的值,以便 python 可以实际创建脚本文件。不过,这并不是一个真正的好方法,您可能希望在 python 脚本旁边的目录中准备好脚本并从那里复制它们。查看here的示例

      from os import listdir
      from os.path import isfile, join
      
      CHECK_PATH = "D:"
      AHK_EXECUTABLE_PATH = "path/to/ahk.exe"
      SCRIPTS_TO_CHECK = {'script1.ahk':"""^!NumpadMult::Send  {Volume_Mute}
      ^!NumpadAdd::Send   {Volume_Up}
      ^!NumpadSub::Send   {Volume_Down} """, 'script2.ahk':" some other script here"}
      
      files_to_check = set(listdir(CHECK_PATH)) # using a set for fast lookup later
      
      for scriptname, script in SCRIPTS_TO_CHECK.items():
          if not scriptname in files_to_check:
              print(f"script {scriptname} not found, creating it.")
              with open(scriptname, 'w') as file:
                  file.write(script)
          # else
          subprocess.call(AHK_EXECUTABLE_PATH, scriptname)
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-27
        • 2012-05-10
        • 2010-11-18
        • 2012-11-29
        • 1970-01-01
        • 2020-08-18
        • 2014-07-20
        相关资源
        最近更新 更多