问题起源
Win7系统,电脑上之前是python 2.7
和python 3.6
版本共存的,后面把2.7的版本卸载了,发现py
和pyc
的文件关联没了。
尝试在程序卸载面板中用安装程序进行修复,Python Launcher修复也试了,都没修复成功。
于是对py和pyc文件进行手动关联(右键菜单->打开方式),当时想都没想,就关联到用python.exe打开,中间使用一直没有发现有什么问题。
直到最近在使用argparse模块时,发现直接脚本执行(test.py --logdir=E:/logs
这样执行)时,参数死活传不进去,但是python test.py --logdir=E:/logs
这样又可以。
测试代码
测试代码如下:
# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'--logdir',
type=str,
default='D:/logs',
required=False,
help='log directory'
)
args = parser.parse_known_args()
print(args)
test.py –logdir=E:/logs执行结果:
(Namespace(logdir='D:/logs'), [])
python test.py –logdir=E:/logs执行结果:
(Namespace(logdir='E:/logs'), [])
很明显直接脚本执行的结果是错的,想想真的是很奇怪,于是各种找原因,最后发现是打开方式关联到python.exe引起的,下面是总结的几种修复方法,有遇到类似问题的可以试试。
修复方法
方法一
在py和pyc文件上,右键菜单->打开方式->选择默认程序->选择C:\Windows\py.exe
(这个好像是3以上版本才有),正常情况下文件关联会修复成功。
方法二
程序卸载面板(控制面板->程序和功能),使用python安装程序或Python Launcher进行修复,如果运气好,也能修复成功。
方法三
如果以上两种方法都不行,只能注册表修复了,将下面的文本,复制到记事本,保存为fix.reg扩展名,双击导入注册表。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.py]
@="Python.File"
"Content Type"="text/plain"
[HKEY_CLASSES_ROOT\.pyc]
@="Python.CompiledFile"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithList]
"a"="python.exe"
"MRUList"="a"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids]
"Python.File"=hex(0):
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pyc]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pyc\OpenWithList]
"a"="python.exe"
"MRUList"="a"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pyc\OpenWithProgids]
"Python.CompiledFile"=hex(0):