在所选文件上运行Python脚本

时间:2011-12-20 03:01:43

标签: python windows contextmenu

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

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

5 个答案:

答案 0 :(得分:22)

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

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

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

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

这会传入所有传入的参数,因此sys.argv[1]应该为您提供传入的文件。我测试了它并且它可以工作。您需要.cmd文件而不是直接转到.py的原因是因为.py文件不会显示在“发送到”菜单中。

有关获取文件的更多信息,请访问:
Accepting File Argument in Python (from Send To context menu)

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

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

答案 1 :(得分:3)

而不是%1使用%*

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

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

请注意,命令行已内置character limits 2047 for XP及之前版本,8191适用于Windows 7及更高版本

答案 2 :(得分:3)

要向右键单击上下文菜单添加python脚本等内容,也可以在

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

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

的python脚本启动器
C:\Python27\python.exe "C:\path\to\your\script\yourscript.py"

我不知道如何使用前面提到的解决方案来获取多个文件选择到sys.argv,但我认为这也值得一提。

答案 3 :(得分:1)

这个网页Adding Windows context-menu actions有一个很好的python脚本,它将注册一个上下文菜单,将文件路径传递给你的python脚本。我没有尝试,但看起来很容易将此示例修改为您需要做的事情。另外,这种方式比我想的sendTo解决方案少一点。

答案 4 :(得分: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 包的启动,带有版本控制和经典的开发方法。