提问人:Marc B. Hankin 提问时间:11/22/2011 最后编辑:tripleeeMarc B. Hankin 更新时间:12/1/2022 访问量:5092
使用 Python 模块在文件上打开资源管理器
Use a Python Module to Open Explorer on a file
问:
我是python新手,在用一些非常有用的代码制作模块时遇到了一些困难,这些代码位于:打开文件上的资源管理器。
我无法弄清楚我做错了什么。
我收到以下错误消息:
第 31 行:C:\Apps\E_drive\Python_win32Clipboard.pdf第 34 行:r'explorer /select, “C:\Apps\E_drive\Python_win32Clipboard.pdf”' 回溯(大多数 最近调用 last):文件 “P:\Data\VB\Python_MarcsPrgs\Python_ItWorks\Open_Win_Explorer_and_Select_File.py”, 第 42 行,在 Open_Win_Explorer_and_Select_Fil(文件路径) 文件“P:\Data\VB\Python_MarcsPrgs\Python_ItWorks\Open_Win_Explorer_and_Select_File.py”, 第 35 行,Open_Win_Explorer_and_Select_Fil 子进程。Popen(Popen_arg) 文件“C:\Python27\lib\subprocess.py”,第 679 行,init errread、errwrite) 文件“C:\Python27\lib\subprocess.py”,第 893 行,_execute_child startupinfo) WindowsError:[错误 2] 系统找不到指定的文件
这是我的模块:
"""
Open Win Explorer and Select File
# "C:\Apps\E_drive\Python_win32Clipboard.pdf"
"""
import sys
import os, subprocess, pdb
def fn_get_txt_sysarg():
"Harvest a single (the only) command line argument"
# pdb.set_trace()
try:
arg_from_cmdline = sys.argv[1]
arg_from_cmdline = str(arg_from_cmdline)
except:
this_scriptz_FULLName = sys.argv[0]
ErrorMsg = "Message from fn_get_txt_sysarg() in Script (" + this_scriptz_FULLName + '):\n' \
+ "\tThe Script did not receive a command line argument (arg_from_cmdline)"
returnval = arg_from_cmdline
return returnval
def Open_Win_Explorer_and_Select_Fil(filepathe):
# harvested from... https://stackoverflow.com/questions/281888/open-explorer-on-a-file
#import subprocess
#subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"')
f = str(filepathe)
print "line 31: " + f
Popen_arg = "r'explorer /select, " + '"' + f + '"' + "'"
Popen_arg = str(Popen_arg)
print "line 34: " + Popen_arg
subprocess.Popen(Popen_arg)
if __name__ == '__main__':
filepath = fn_get_txt_sysarg()
Open_Win_Explorer_and_Select_Fil(filepath)
答:
我认为问题出在.从输出中请注意,的值为 :Popen_arg
Popen_arg
r'explorer /select, "C:\Apps\E_drive\Python_win32Clipboard.pdf"'
这实际上是一个 python 原始字符串文字。您希望Popen_arg具有此字符串文本所表示的值,而不是此字符串文本本身。我想如果你把它改成
Popen_arg = r'explorer /select, "' + f + '"'
它会更好地工作。另请注意,该行:
Popen_arg = str(Popen_arg)
没有效果,可以安全移除。
我复制了您的代码并在我的机器上运行它,发现了两个错误。srgerg 提供的答案解决了其中一个错误。另一种是,当命令行上没有指定参数时,Python 会在 fn_get_txt_sysarg() 中触发错误。下面是一些示例代码,修复了错误并进行了一些其他清理:
"""
Open Win Explorer and Select File
"""
import sys
import subprocess
def fn_get_txt_sysarg():
"""Harvest a single (the only expected) command line argument"""
try:
return sys.argv[1] # str() would be redundant here
except:
ErrorMsg = 'Message from fn_get_txt_sysarg() in Script (' + sys.argv[0] + '):\n' + '\tThe Script did not receive a command line argument'
sys.exit(ErrorMsg)
def Open_Win_Explorer_and_Select_Fil(filepath):
# harvested from: https://stackoverflow.com/questions/281888/open-explorer-on-a-file
Popen_arg = 'explorer /select,"' + filepath + "'" # str() is redundant here also
subprocess.Popen(Popen_arg)
if __name__ == '__main__':
filepath = fn_get_txt_sysarg()
Open_Win_Explorer_and_Select_Fil(filepath)
评论
Popen_arg
Popen_arg = "explorer /select, \"" + f + "\""
评论