0

注意:我已經嘗試了每個解決方案在stackoverflow!命令行參數不被檢索

我使用的是Windows 10和python 3.5。我得到這個錯誤:

Traceback (most recent call last): 
File "geiger_plot.py", line 236, in <module> 
    main() 
TypeError: main() missing 1 required positional argument: 'argv' 

,當我嘗試使用每一個可以想象的命令來執行腳本:

geiger_plot.py test 
python geiger_plot.py test 
"C:\Program Files\Python35\python.exe" geiger_plot.py test 
"C:\Program Files\Python35\python.exe" C:\Users\Chaosuser\Desktop\GeigerLog\geiger_plot.py test test test 

我已經固定的蟒蛇命令行參數的註冊表項:

[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command] 
@="\"C:\\Program Files\\Python35\\python.exe\" \"%1\" %*" 

[HKEY_CLASSES_ROOT\Applications\pythonw.exe\shell\open\command] 
@="\"C:\\Program Files\\Python35\\pythonw.exe\" \"%1\" %*" 

(這是從一個導出的.reg - 這就是爲什麼有成千上萬的反斜槓。) 在腳本本身,我所做的一切正確,據我所知。這是我想要使用參數從另一個腳本執行的腳本將它傳遞給文件路徑(logfile)。這總是給我錯誤,所以我試圖直接從shell運行它。

import sys 

def main(argv): 
    sys.argv 
    print(sys.argv) 
    logfile = str(sys.argv[1]) 

它只是甚至沒有給我錯誤關於我使用sys.argv

出了什麼問題?

溶液去除的argv:

def main(argv): 
    print(sys.argv) 
to 
def main(): 
    print(sys.argv) 

人...蟒蛇被製造成易其再努力!

+0

Python不執行被稱爲'主要功能()' 。在腳本的結尾用一個'main(sys.argv)'語句自己調用它。如果您的腳本也可以被另一個腳本導入(您可能不希望運行main()),您可能需要使用if __name__ =='__main __'來創建條件。 – martineau

+0

請勿寫入'HKEY_CLASSES_ROOT'。該鍵是一個用於*閱讀*的合併視圖。寫入的結果是不確定的。針對您要更新的確切配置單元:'[HKLM | HKCU] \ SOFTWARE \ Classes'。另外,如果您的當前用戶實際上已配置爲使用「Applications \ python.exe」子項,則您已修改(破壞)了您的Python安裝。它應該使用'Python.File'和'Python.NoConFile',它應該使用py [w] .exe啓動程序。用戶選擇在這裏(只讀):HKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \ .py \ UserChoice。 – eryksun

+0

eryksun我手動完成了這項工作,並使用regedit的導出功能獲取鑰匙,以便與其他人共享。這是怎麼回事:[HKLM | HKCU]具體?我查看了python.file和python.noconfile,從一開始他們就沒事了。 Theres沒有py.exe也沒有pyw.exe,在我的情況下它的python.exe – Distelzombie

回答

0

從主要的招牌拆下argv參數,只需使用sys.argv[1]

def main(): 
    print(sys.argv[1]) 

您還需要調用主:自動

if __name__ == '__main__': 
    main() 
+0

什麼是「市電簽名」? def main(argv):?在腳本的末尾,放sys.argv或不?有什麼不同? – Distelzombie

+0

是的,這就是我的主要簽名。我只是編輯了答案,使其更加清晰。 – Jay

+0

底部已經有'if __name__ =='__main __':'。但我應該從簽名中刪除argv。我試試....是的,這是解決方案。 fgs,那麼簡單... – Distelzombie