在选定文件上运行 Python 脚本

问题描述 投票:0回答:7

我想编写一个 python 脚本来上传我在 Windows 资源管理器中选择的任何文件。这个想法是在 Windows 资源管理器中选择任何文件,右键单击以显示文件的上下文菜单,然后从那里选择一个命令……比如“上传到 Web 服务器”。

选择命令后,Python 运行一个脚本,该脚本接收要上传的文件的文件路径和文件名。编写将文件上传到网络的 Python 脚本似乎很简单。不清楚的是如何在 Windows 上下文菜单中为 Python 脚本创建一个实体。以及如何将文件路径和文件名传递给Python脚本来捕捉....请指教!

python windows winapi contextmenu
7个回答
31
投票

假设是 Windows 7,如果你打开一个文件夹并在地址栏中输入“shell:sendto”,然后按回车键,你将被带到上下文菜单。您可以添加一个包含以下内容的 .cmd 文件。

@echo off
cls
python C:\Your\File\uploadscript.py %1

这应该执行将文件 (%1) 作为参数传入的 python 脚本。在 python 脚本中,您可以使用:

import sys
sys.argv  #sys.argv[1] is the file to upload

这会获取传入的所有参数,因此

sys.argv[1]
应该会为您获取传入的文件。我测试了它并且它有效。您需要 .cmd 文件而不是直接转到 .py 的原因是因为 .py 文件不会显示在“发送到”菜单中。

获取传入文件的更多信息在这里:
在 Python 中接受文件参数(从发送到上下文菜单)

编辑:添加用于调用多个文件的脚本。请注意,这会在每个单独的文件上调用 python 脚本,如果您想将所有文件作为参数发送到 python 脚本,那么您需要做更多的工作。如果你想做更高级的事情,你需要研究批处理脚本。

@echo off
cls
:upload_loop
IF "%1"=="" GOTO completed
  python C:\Your\File\uploadscript.py %1
  SHIFT
  GOTO upload_loop
:completed

11
投票

而不是

%1
使用
%*

%1
将传递第一个参数,
%*
将传递所有参数(
%n
将传递第 n 个...)

@echo off
cls
python C:\Your\File\uploadscript.py %*

请注意,命令行已内置字符限制XP 及之前版本为 2047,Windows 7 及更高版本为 8191


5
投票

要将python脚本等添加到右键单击上下文菜单中,也可以在

中添加注册键(regedit)
\HKEY_CLASSES_ROOT\Directory\Background\shell

在那里,添加一个容器,将其命名为您想要在上下文菜单中显示的字符串。在其中,添加一个 REG_SZ 类型的键,其中包含例如 python 脚本启动器

C:\Python27\python.exe "C:\path\to\your\script\yourscript.py"

我不知道如何使用上述解决方案将多个文件选择纳入 sys.argv,但我认为这也值得一提。


2
投票

此网页添加 Windows 上下文菜单操作 有一个很好的 python 脚本,它将注册一个上下文菜单以将文件路径传递给您的 python 脚本。我没有尝试过,但将此示例修改为您需要执行的操作看起来很容易。另外,这种方式比我猜的 sendTo 解决方案少点击一次。


1
投票

作为当前的初级程序员,这些答案都没有帮助。 我问了一个朋友,他帮了我。

这是我的解决方案:

在regedit中创建一个快捷方式:

  1. 按 Windows Button+ R,在字段中输入“regedit”
  2. 选择需要放置文件的位置(我建议 “HKEY_CURRENT_USER\AllFilesystemObjects\shell & HKEY_CURRENT_USER\AllFilesystemObjects\shellex”。这样你的快捷方式就会显示在文件、文件夹和程序上)
  3. 在该文件夹中创建一个新密钥
  4. 在您的新文件夹中创建一个新密钥并调用我“命令”
  5. 在“命令”中,您现在放置需要执行的文件路径。在它的末尾你放一个“%1”

它应该是这样的:"C:\Python older ile.py" "%1" (是的,它适用于 python 文件,但你也可以使用 cmd 文件)

(我们有一个错误,所以他在我当前的推荐文件中稍微更改了它,它看起来像这样: C:\Users\UserName\AppData\Local\Programs\Python\Python38\python.exe "C:\Python older ile.py" "%1"

我不能告诉你的原因,但它有效:D)

对于 python 文件,我使用了以下内容:

import sys
sys.argv[1]
print("It worked",sys.argv[1])
while True:
v=1

这样,您就拥有了拥有快捷方式和导入路径所需的一切。


0
投票

除了前面的答案,也可以使用SendTo文件夹中的python脚本。

这允许:

  • 在 import 语句周围使用
    try... except
    块,以防您的图书馆已移动或发生诸如此类的事情;
  • 在参数列表上使用
    for
    循环。

例子:

import sys

try:
    import foo
except ImportError as exc:
    print("cannot start!", exc)
    input("press Enter to close")
    sys.exit()

try:
    foo.main(sys.argv[1:])
except Exception as exc:
    print(f"Unexpected error! {exc}")
    input("press Enter to close")
    sys.exit()

input("press Enter to close")

我建议这个脚本保持最小,并且只提供构建良好的 Python 包的启动,具有版本控制和经典开发方法。


0
投票

#第一步 #创建python文件名test.py 导入系统 打印(sys.argv) 输入('退出!')

#步骤 2 test.py 到 test.exe

#步骤 3 """ 选择任何文件并单击打开方式并选择您的(test.exe) 现在看看打印出来的清单你就明白了!

"""
© www.soinside.com 2019 - 2024. All rights reserved.