1. 程式人生 > 程式設計 >解決python便攜版無法直接執行py檔案的問題

解決python便攜版無法直接執行py檔案的問題

關聯:windows下無字首直接執行.py檔案

關聯:便攜版python無法直接執行python指令碼的問題

症狀:直接執行py指令碼發現無法傳遞引數。

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

指定py檔案使用python.exe開啟時,直接執行 sqlmap.py - u xxx 發現無法傳遞引數。

解決python便攜版無法直接執行py檔案的問題

原因:登錄檔鍵值中缺少傳遞引數

指定便攜版python開啟py指令碼時,登錄檔中開啟方式鍵值中少了傳遞引數的功能

本需要 C:/python路徑/python.exe “%1” %* ,其中"%1" %* 起傳遞引數的作用。

但是登錄檔中只加入了 “C:/python路徑\python.exe” “%1”,因此,無法直接執行py指令碼

示例:能夠正常使用的登錄檔

HKEY_CLASSES_ROOT.py

解決python便攜版無法直接執行py檔案的問題

HKEY_CLASSES_ROOT.py_auto_file\shell\open\command

解決python便攜版無法直接執行py檔案的問題

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

解決python便攜版無法直接執行py檔案的問題

修復

第一步:先指定py檔案的開啟方式。

右擊py檔案——>找到python.exe——>勾選始終使用此應用開啟.py檔案。

解決python便攜版無法直接執行py檔案的問題

修復登錄檔

新建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

解決python便攜版無法直接執行py檔案的問題

擴充套件: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 。

補充知識:Python學習之安裝目錄下的python.exe與pythonw.exe檔案的區別

python.exe在執行程式的時候,會彈出一個黑色的控制檯視窗(也叫命令列視窗、DOS/CMD視窗);

pythonw.exe是無視窗的Python可執行程式,意思是在執行程式的時候,沒有視窗彈出,程式碼在後臺執行。

.py和**.pyw**檔案的區別也來源於python.exe和pythonw.exe的區別:

安裝 Windows 版 Python 時,副檔名為 .py 的檔案被預設為用 python.exe 執行的檔案,而 .pyw 檔案則被預設為用 pythonw.exe 執行。

.pyw 格式是被設計用來執行開發的純圖形介面程式的,純圖形介面程式的使用者不需要看到控制檯視窗。在開發純圖形介面程式的時候,可以暫時把 .pyw 改成 .py ,執行時能調出控制檯視窗,方便看到所有錯誤資訊。

至於.pyc檔案,是Python直譯器執行程式的過程中產生的位元組碼檔案(也就是中間生成的檔案)。

這裡還要解釋一個問題,如果.py檔案直接用python.exe開啟,檔案被執行完成之後,視窗會立即關閉,如果想讓視窗停留,給大家提供兩個方法:

①可以在程式中import time模組,加入超長睡眠語句,如time.sleep(1800),如果你不手動關閉視窗,視窗將會停留30min;

②可以呼叫sys和os模組,使用命令列語句pause(個人覺得有些牛刀殺雞的感覺)。

以上這篇解決python便攜版無法直接執行py檔案的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。