繁体   English   中英

如何制作 Windows 快捷方式以在 Python 脚本中运行函数?

[英]How to make a Windows shortcut to run a function in a Python script?

我正在尝试找到一种方法来创建从 Python 文件执行函数的 Windows 快捷方式。 正在运行的函数看起来像这样(它在 shell 中运行一个命令):

def function(command):
    subprocess.run(command, shell = True, check = True)

我知道您可以使用快捷方式直接运行cmd函数和命令,但我希望它由 Python 控制。

我几乎没有使用 Windows 快捷方式的经验,所以我能做的最好的就是向您展示以下内容:

快捷方式属性对话框截图

这就是我想象的它想要的。

快速谷歌搜索后,我能找到的唯一帮助是如何使用 Python 制作快捷方式,而不是如何从中运行函数。 所以希望我所问的甚至是可能的?

一般来说,AFAIK,您不能这样做,但是如果目标脚本以某种方式编写并传递函数的名称以作为参数运行,则可以这样做。 您甚至可以通过在快捷方式中的名称后面列出参数来添加要传递给函数的参数。

目标脚本必须设置一个if __name__ == '__main__':部分,类似于下面显示的执行命名函数的部分,它作为命令行参数传递。 最后的input()调用只是为了使控制台窗口保持打开状态,以便可以看到打印的内容。

target_script.py

def func1():
    print('func1() running')

def func2():
    print('func2() running')


if __name__ == '__main__':

    from pathlib import Path
    import sys

    print('In module', Path(__file__).name)

    funcname = sys.argv[1]
    vars()[funcname]()  # Call named function.

    input('\npress Enter key to continue...')

要使用它,您需要创建一个带有Target:的快捷方式,设置为:

python D:\path_to_directory\target_script.py func1

输出:

In module target_script.py
func1() running

press Enter key to continue...

概括

也可以编写一个脚本,该脚本可以应用于其他不像target_script那样编写的脚本。

run_func_in_module.py

import importlib.util
from pathlib import Path
import sys

mod_filepath = Path(sys.argv[1])
funcname = sys.argv[2]

# Import the module.
spec = importlib.util.spec_from_file_location(mod_filepath.stem, mod_filepath)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

# Call the specified function in the module.
mod_func = getattr(module, funcname)
mod_func()

要使用此版本,您需要创建一个带有Target:的快捷方式,设置为:

python D:\path_to_directory\run_func_in_module.py D:\another_directory\target_script.py func2

请注意, target_script.py将不再需要最后的if __name__ == '__main__':部分(尽管有一个不会有害)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM