Python argparse行为因启动模式而异(Windows)

时间:2018-03-27 14:18:55

标签: python windows argparse

这是我的 test-argparse.py 软件的摘录:

from __future__ import print_function
import argparse
import sys

def manage_command_line():
    parser = argparse.ArgumentParser(description='Simple Description')
    parser.add_argument('code', type=str, help='Project code')
    return parser.parse_args()

args = manage_command_line()
print(args)
print(sys.version)

当作为解释器的参数调用时(结果是正确的和预期的):

c:\Python27\python.exe test-argparse.py KB130
Namespace(code='KB130')
2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)]

但是如果直接调用它,依赖于windows文件关联,结果就完全不同了:

C:\Users\PGO\Documents\docauto>test-argparse.py KB130
usage: test-argparse.py [-h] code
test-argparse.py: error: too few arguments

Windows文件组关联和重定向的定义是标准的,如Python 2.7.14手册(第3.3.4章)中所述:

C:\Users\PGO\Documents\docauto>assoc .py
.py=Python.File

C:\Users\PGO\Documents\docauto>ftype Python.File
Python.File="C:\Python27\python.exe" "%1" %*

C:\Users\PGO\Documents\docauto>

与我的系统路径一致,虽然我的Python版本是2.7.12而不是2.7.14,但这可能完全没有区别。

问题:在这两种情况下,是否有办法确定一致的结果?我希望应用程序的一致行为与其执行方式无关。

1 个答案:

答案 0 :(得分:1)

这就是我得到的:

C:\Users>ftype Python.File

  

Python.File =“C:\ Windows \ py.exe”“%L”%*

这两种情况都适合我。我有Python 3.6,可以解释可执行文件名称的区别。