修复python便携版无法直接运行py文件的问题


关联:windows下无前缀直接运行.py文件
关联:便携版python无法直接运行python脚本的问题

症状:直接运行py脚本发现无法传递参数。

在python便携版可正常使用的情况下,python sqlmap.py - u xxx 可正常使用

指定py文件使用python.exe打开时,直接运行 sqlmap.py - u xxx 发现无法传递参数。

py文件不能用python打开 为什么py文件不可打开_py文件不能用python打开


py文件不能用python打开 为什么py文件不可打开_python_02


原因:注册表键值中缺少传递参数

指定便携版python打开py脚本时,注册表中打开方式键值中少了传递参数的功能

本需要 C:/python路径/python.exe “%1” %* ,其中"%1" %* 起传递参数的作用。

但是注册表中只加入了 “C:/python路径\python.exe” “%1” ,因此,无法直接运行py脚本示例:能够正常使用的注册表

HKEY_CLASSES_ROOT.py

py文件不能用python打开 为什么py文件不可打开_python_03


HKEY_CLASSES_ROOT.py_auto_file\shell\open\command

py文件不能用python打开 为什么py文件不可打开_打开方式_04


HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command

py文件不能用python打开 为什么py文件不可打开_传递参数_05

修复
第一步:先指定py文件的打开方式。
右击py文件——>找到python.exe——>勾选始终使用此应用打开.py文件。

py文件不能用python打开 为什么py文件不可打开_py文件不能用python打开_06

修复注册表
新建python.reg 内容如下:【注意:其中C:\Program_Base\Python37\python.exe是我的python路径,注册表文件中需要斜杠\转义特殊字符】

-----------------我是分割线----------------------
 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT.py]
 @=".py_auto_file"[HKEY_CLASSES_ROOT.py_auto_file]
 [HKEY_CLASSES_ROOT.py_auto_file\shell]
 [HKEY_CLASSES_ROOT.py_auto_file\shell\open]
 [HKEY_CLASSES_ROOT.py_auto_file\shell\open\command]
 @="“C:\Program_Base\Python37\python.exe” “%1” %*"[HKEY_CLASSES_ROOT\Applications\python.exe]
 [HKEY_CLASSES_ROOT\Applications\python.exe\shell]
 [HKEY_CLASSES_ROOT\Applications\python.exe\shell\open]
 [HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command]
 @="“C:\Program_Base\Python37\python.exe” “%1” %*"
 -----------------我是分割线----------------------

修复结果:OK

py文件不能用python打开 为什么py文件不可打开_python_07


扩展:python2-3脚本共存问题

问题:

这里有一个py脚本的调用问题,因为目前python2还有一点需求,选择打开方式是选python2还是选python3?默认同时肯定只有一个生效的

例如:
如果选的默认打开方式是python3的exe, 那么【sqlmap.py – u xxx】 肯定是调用python3执行py脚本

解决思路:
把python2的脚本改成.py2 ,然后按上述操作改改注册表

详细步骤:
1、先指定.py2文件的打开方式。2、导入注册表文件python2.reg

新建python2.reg 内容如下:
【注意:其中C:\Program_Base\Python27\python.exe是我的python2路径,注册表文件中需要斜杠\转义特殊字符】

-----------------我是分割线----------------------
 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT.py2]
 @=".py2_auto_file"[HKEY_CLASSES_ROOT.py2_auto_file]
 [HKEY_CLASSES_ROOT.py2_auto_file\shell]
 [HKEY_CLASSES_ROOT.py2_auto_file\shell\open]
 [HKEY_CLASSES_ROOT.py2_auto_file\shell\open\command]
 @="“C:\Program_Base\Python27\python.exe” “%1” %*"
 -----------------我是分割线----------------------

#缺少的部分属于重复部分可以忽略,
实际删除[HKEY_CLASSES_ROOT\Applications\python2.exe]键值对,也能够正常运行python sqlmap.py -h 和sqlmap.py -h 。

其他参考文章:
Windows 制作免安装的python环境

Windows 制作免安装的JAVA环境

Windows免安装java、python环境分享

免安装java环境不能双击运行jar文件的优化解决办法