簡體   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