在Windows上直接运行python文件时,命令行参数被删除

我正在学习在我的代码中包含命令行参数。 我已经阅读了argparse的文档,并试着从这里运行这个脚本。

 #argparse_trial.py import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers)) 

如果我跑

 >python argparse_trial.py 1 

在命令行中,我得到了预期的结果1
但是,如果我跑

 >argparse_trial.py 1 

我明白了

 usage: arg_parse_trial.py [-h] [--sum] N [N ...] argparse_trial.py: error: the following arguments are required: N 

我检查了代码似乎在第二种情况下收到的唯一的参数是文件名本身,不pipe有多less个参数。
我在Windows机器上,Python是在我的path。

为什么第二种情况在这个脚本中失败? 我怎样才能使它工作?

这是一个猜测,我现在不能测试,但我相信这是发生了什么事情:

  1. 你输入你的python文件的名字。
  2. Windows无法运行该文件作为一个程序,所以…
  3. Windows尝试使用关联程序(使用start )打开文件。
  4. 虽然这样做,它只是忽略了其他的事情,并…
  5. …为python解释器生成一个基本的命令行,只需要解释器本身和打开的目标文件。

想想当你运行一个文本文件时会发生什么。

如果命令行没有正确生成,运行这个命令应该修复它(根据需要替换路径):

 ftype Python.File=C:\Path\to\python.exe "%1" %* 

注意最后的%* 。 如果不对,参数将被丢弃。

我认为代码工作正常。 您可以通过选择默认的程序python.exe python文件执行该程序。
在你的情况python.exe "1" %*作为@spectras建议,所以它将能够采取命令行参数。

还提供路径环境变量。
pip,virtualenv and youtube-dl这样的程序都是可执行文件,如果已经设置了环境变量,我们就可以在任何地方使用它。

如何在Windows上选择默认程序:
http://windows.microsoft.com/en-in/windows/change-default-programs#1TC=windows-7

您可以使用Python中包含的sys库,并使用argv()函数来执行各种命令参数。

找到这个视频教程直观的了解如何!

https://www.youtube.com/watch?v=rLG7Tz6db0w

这是除了观众和Bhansa的回答。
对于Windows 10用户,设置高级文件关联有点复杂。 您将不得不编辑您的注册表文件。 运行regedit
转到HKEY_CURRENT_USER\SOFTWARE\Classes\py_auto_file\shell\open\command并将Data的值从
"C:\Path\To\Python\python.exe" "1"

"C:\Path\To\Python\python.exe" "1" %*

这也可能适用于以前的Windows版本。