我试图编写这样的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:测试:一:一元运算符预期"。但如果我只是这样做
arg one
它工作正常。
我的问题是:为什么我不能像这样传递多个参数?正确的方法是什么?
谢谢!
你可能将脚本命名为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
你应该使用 argparse 或较旧的 optparse 解析 Python 中的命令行参数。
您的脚本应该可以正常工作。记得放一个 shebang 行,告诉 bash 使用 Python 作为解释器,例如 #! /usr/bin/env python