不检索命令行参数

时间:2017-02-17 03:45:19

标签: python windows python-3.x command-line command-line-arguments

注意:我已经尝试过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

我已经修复了python命令行参数的注册表项:

[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)

Man ... python再次变得如此简单!

1 个答案:

答案 0 :(得分:0)

从主要签名中删除argv参数,然后使用sys.argv[1]

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

您还需要致电main:

if __name__ == '__main__': 
    main()