利用Windows的Python 3.4.2我要与当前运行脚本的这样的文件夹,打开资源管理器:浏览器不显示文件夹
import os, subprocess
subprocess.check_call(['explorer', os.path.dirname(__file__)])
相反,我看到该探险家被打开了默认文件夹 “C:\用户\ XX \文件”,并抛出一个错误:
Traceback (most recent call last):
File "C:/XXX/YYY.py", line 9, in <module>
subprocess.check_call(['explorer', os.path.dirname(__file__)])
File "C:\Python34\lib\subprocess.py", line 561, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['explorer', 'C:/XXX']' returned non-zero exit status 1
虽然os.path.dirname
回报与Windows斜杠(反斜杠是路径分隔符),你的路径可以复制并粘贴到探险家,它会打开位置很好。 (XXX是路径部分,YYY是文件名部分)
此外,如果您手动编辑路径(因为它在浏览器中有反斜杠),即使这样命令也会失败。
subprocess.check_call(['explorer', r'C:\Users'])
但至少Explorer将打开正确的目录,尽管抛出了同样的错误的(所以也许使用call
代替check_call
)。
这是怎么回事?如何在资源管理器中显示正在运行的Python脚本文件的文件夹?
_“你正在传递一个空字符串”_不同意'Command'['explorer','C:/ XXX']'返回的非零出口的错误信息... – Eric
应用'os.path .abspath(__ file __)'并使用'subprocess.call'而不是'subprocess.check_call'修复了我的问题。谢谢。然而,这不是因为路径是空的(不是),而是因为'abspath'将斜杠转换为反斜杠。即使然后浏览器的非正常退出代码仍然存在,但只要它显示正确的文件夹,我不会抱怨... – Trilarion
@Trilarion和埃里克你们两个都是完全正确的;我已经更新了我的答案。我欺骗了自己,因为如果你发送空字符串,你会得到相同的症状。大笨笨的我。 –