在选定文件上运行Python脚本

22

我想编写一个Python脚本,可以上传我在Windows资源管理器中选择的任何文件。这个想法是在Windows Explorer中选择任何文件,右键单击以显示文件的上下文菜单,并从中选择一个命令...类似于“上传到Web服务器”之类的东西。

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

7个回答

35

假设您使用的是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 文件不会显示在“发送到”菜单中。
有关获取传递文件的更多信息,请参见此处:
在 Python 中接受来自“发送到”上下文菜单的文件参数 编辑:添加用于调用多个文件的脚本。请注意,这将在每个单独的文件上调用 python 脚本,如果你想将所有文件作为参数传递给 python 脚本,则需要做更多的工作。如果要进行更高级的操作,请研究批处理脚本。
@echo off
cls
:upload_loop
IF "%1"=="" GOTO completed
  python C:\Your\File\uploadscript.py %1
  SHIFT
  GOTO upload_loop
:completed

2
你如何一次传递多个文件?我只能传递一个文件。 - Tristan Forward
添加一个能够工作的方法。如果你想在单个Python调用中完成它,那么你必须使用变量,这可能会有所帮助:http://en.wikibooks.org/wiki/Windows_Batch_Scripting - Tyler Ferraro
4
建议使用 %* 代替 %1 - binki

13

使用%*代替%1

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

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

请注意,命令行内置字符限制:XP及以下为2047,Windows 7及更高版本为8191。


6
要将诸如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
作为一名刚入门的程序员,这些答案对我都没有帮助。我向朋友求助并得到了帮助。
以下是我的解决方案:
在注册表中创建一个快捷方式:
1.按下Windows键+R,在字段中输入“regedit” 2.选择需要放置文件的位置(我建议“HKEY_CURRENT_USER\AllFilesystemObjects\shell & HKEY_CURRENT_USER\AllFilesystemObjects\shellex”。这样你的快捷方式将显示在文件、文件夹和程序上) 3.在该文件夹中创建一个新键 4.在你的新文件夹中创建一个新键并称之为“command” 5.在“command”中输入需要执行的文件路径,在其末尾添加“%1”
它应该看起来像这样:“C:\Python\folder\file.py” "%1" (是的,它可以与Python文件一起使用,但你也可以使用cmd文件)
(我们遇到了一个错误,所以他在我的当前注释文件上进行了一点更改,它现在看起来像这样: C:\Users\UserName\AppData\Local\Programs\Python\Python38\python.exe "C:\Python\folder\file.py" "%1")
我不能告诉你原因,但它确实有效:D
对于Python文件,我使用了以下内容:
import sys
sys.argv[1]
print("It worked",sys.argv[1])
while True:
v=1

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


0
#step 1
#create python file name   test.py 
#this is the contenet of test.py
import sys
print(sys.argv)
input('quit ! ')

#step 2 
#convert test.py   to test.exe

#step 3
"""
chose any file and click open with and chose your (test.exe) 
now look the list printed you will understand ! 

    """

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Ajeet Verma
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Nikolaj Š.

0
除了之前的答案,还可以在SendTo文件夹中使用Python脚本。
这样可以:
  • 在导入语句周围使用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包的启动,具有版本控制和经典的开发方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接