0

Примечание: я уже пробовал каждое решение в stackoverflow!аргументы командной строки не получены

Я использую окна 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). Это всегда давало мне ошибки, поэтому я попытался запустить его из оболочки напрямую.

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) 

Man ... питон сделано так легко его трудно снова!

+0

Python не выполняет функцию с именем 'основной()' автоматически , В конце вашего скрипта назовите его самим с помощью оператора 'main (sys.argv)'. Возможно, вы захотите сделать это условным с помощью 'if __name__ == '__main __':' если ваш скрипт также может быть импортирован другим (где вы, вероятно, не захотите запускать main() '). – martineau

+0

Не записывайте в 'HKEY_CLASSES_ROOT'. Этот ключ является объединенным представлением, предназначенным для * чтения *. Результат его написания неопределен. Будьте конкретны для точного улья, который вы хотите обновить: '[HKLM | HKCU] \ SOFTWARE \ Classes'. Кроме того, если ваш текущий пользователь фактически настроен на использование раздела «Приложения \ python.exe», вы изменили (сломали) вашу установку Python. Он должен использовать 'Python.File' и' Python.NoConFile', которые должны использовать py [w] .exe launcher. Выбор пользователя находится здесь (только для чтения): 'HKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \ .py \ UserChoice'. – eryksun

+0

eryksun Я сделал это вручную и использовал функцию экспорта regedit, чтобы получить ключи для меня, чтобы поделиться с другими. Как это: [HKLM | HKCU] конкретный? Я заглянул в python.file и python.noconfile, и с самого начала все было в порядке. Theres no 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