在Windows上使用参数的Python程序

时间:2016-08-28 05:56:39

标签: python argparse

如何在安装了python 2.7的Windows XP上运行保存在test.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 test.py 1 2 3 4

$ python test.py 1 2 3 4 --sum

给出错误"语法无效"。

3 个答案:

答案 0 :(得分:3)

我尝试在命令行运行您的脚本,它运行正常:

$ python arg.py 1 2 3 4 --sum
10

在上面,$是shell的提示符。我输入的内容是python arg.py 1 2 3 4 --sum。它有效。

现在,让我们做我怀疑你正在做的事情:让我们启动一个交互式python shell并输入上面的内容:

$ python
Python 2.7.12+ (default, Aug  4 2016, 20:04:34) 
[GCC 6.1.1 20160724] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> python test.py 1 2 3 4 --sum 
  File "<stdin>", line 1
    python test.py 1 2 3 4 --sum 
              ^
SyntaxError: invalid syntax

这会生成您看到的SyntaxError: invalid syntax错误。 (有一个小的区别:我在Linux上,你在Windows上。)

解决方案是退出python交互式shell并在命令提示符下输入命令。

答案 1 :(得分:0)

这只是我的天真,但考虑到你发布的短消息...

您是否有机会从某本书中获取此代码并尝试在命令行上运行此代码?

本书使用$标记命令行/终端命令,但该字符实际上不是您应该使用的语法或命令的一部分。

所以不要运行它:

$ python 1 2 3

运行:

python 1 2 3

答案 2 :(得分:0)

您的test脚本是Python argparse文档中的第一个示例。 https://docs.python.org/3/library/argparse.html

您添加新行的评论是

Python 2.7.8 (default, Jun 30 2014, 16:03:49) 
[MSC v.1500 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> ================================ RESTART ================================ 
>>> usage: test [-h] [--sum] N [N ...] test: error: too few arguments 
>>> $ python test.py 1 2 3 4 
SyntaxError: invalid syntax 
>>> python test.py 1 2 3 4 
SyntaxError: invalid syntax 
>>> $ python test.py 1 2 3 4 
SyntaxError: invalid syntax 
>>> python test.py 1 2 3 4 --sum 
SyntaxError: invalid syntax 
>>> python test.py 1 2 3 4 --sum

从中我推断出您将脚本保存为test('test.py`会更好),然后从Windows命令行运行它,

python -i test

产生

usage: test [-h] [--sum] N [N ...] test: error: too few arguments

来自parser的用法消息; test是脚本的名称。

我不确定RESTART行。我的测试(最后)表明你的Python调用(或一些默认环境特性)包含-i选项,即使在argparse步骤失败之后,它也会进入交互式Python会话。

下一个命令直接来自Python示例:

>>> $ python test.py 1 2 3 4 
SyntaxError: invalid syntax 

但背景完全没错。文档包括$,表示这是在命令行中键入的(Linux shell或Windows命令)。在正确的背景下,意义是:

  • 运行Python
  • 告诉它运行test.py脚本
  • 并传递参数'1','2'等

但是如果你已经在Python解释器中(由>>>提示字符串表示),这没有意义。 pythontest.py是Python中没有默认含义的字符串。所以解释器会给你一个语法错误。并没有任何变化解决这个问题。

再往前一点,argparse文档给出了一个在Python交互式会话中调用parser的示例:

>>> parser.parse_args(['--sum', '7', '-1', '42'])

语法非常不同。在这个python -i上下文中,它应该运行。

返回Windows命令窗口并输入

python test 1 2 3 4

有更好的工作机会。如果这不起作用,那么你/我们需要专注于运行一个更基本的Python脚本。

======

这是从Linux shell运行另一个简单脚本的示例。 ...$是shell提示符; >>>是python提示符。将-i添加到初始python调用可确保它在解析后保留在python中。

0957:~/mypy$ python -i simple.py
usage: simple.py [-h] foo
simple.py: error: too few arguments
Traceback (most recent call last):
  File "simple.py", line 4, in <module>
    print(parser.parse_args())
   ...
SystemExit: 2
>>> python simple.py 1 2
  File "<stdin>", line 1
    python simple.py 1 2
                ^
SyntaxError: invalid syntax

我的测试和你的测试之间的主要区别在于我没有得到RESTART而且我得到了追溯。如果没有-i,我只需获取使用消息并返回命令行。

1000:~/mypy$ python simple.py
usage: simple.py [-h] foo
simple.py: error: too few arguments
1000:~/mypy$