无法在命令行中将多个参数传递给python脚本

时间:2014-02-13 18:15:46

标签: python bash

我试图写一个像这样的python脚本:

import sys

print sys.argv[1]
print sys.argv[2]

我们称之为arg.py,并在命令行中运行它:

python arg.py one two
打印出来:一两。

一切都很好。

然后我希望它方便,所以我把arg.py放在我的$PATH中并允许它进行疏散所以无论我在哪里,我都可以在命令行中输入arg来运行这个脚本。我试过了

arg one two

但失败了。例外说:“bash:test:one:一元运算符预期”。但是,如果我只是做

arg one

它运作良好。

我的问题是:为什么我不能传递这样的多个参数?什么是正确的方法?

谢谢!

2 个答案:

答案 0 :(得分:4)

您可能将脚本命名为test,这是一个Bash内置名称。将其命名为其他。

$ help test
test: test [expr]
    Evaluate conditional expression.

    Exits with a status of 0 (true) or 1 (false) depending on
    the evaluation of EXPR.  Expressions may be unary or binary.  Unary
    expressions are often used to examine the status of a file.  There
    are string operators and numeric comparison operators as well.

    The behavior of test depends on the number of arguments.  Read the
    bash manual page for the complete specification.

    ...

这就是你从bash收到错误的原因:

bash: test: one: unary operator expected
                   ^--------- because it expects an operator to go before 'two'
             ^-------- and test doesn't like the argument 'one' you've provided
       ^-------- because it's interpreting your command as the builtin 'test'
  ^--- Bash is giving you an error

答案 1 :(得分:0)

您应该使用argparse或较旧的optparse在Python中解析命令行参数。

您的脚本应该可以正常工作。记得放一个shebang行告诉bash使用Python作为解释器,例如#! /usr/bin/env python