Python:如何将大字符串作为单个参数传递?

3 投票
3 回答
6309 浏览
提问于 2025-04-16 17:42

我想把整个字符串作为参数传递给一个Python脚本。现在遇到的问题是,Python默认只取字符串的第一个词。

在下面的例子中,-l这个参数代表日志,我希望它能捕获整个字符串。

例子:

python myscript.py -l "Big String I want to as single argument"

下面的代码:

try:
  opts, args = getopt.getopt(sys.argv[1:], 'hcrn:l:wo:a:emi', ["reset="])
  #-l is one of many arguments I'm looking for
except getopt.error, err:
  print str(err)
  sys.exit(2)

for o, a in getopts:
    if o in ("-l", "--log"):  #log
    logIt(a)  # Problem here a='Big'

我该如何获取第一个参数的整个字符串,而不仅仅是第一个词呢?请给个例子。

3 个回答

0

那应该是 opts 吗?

try:
  opts, args = getopt.getopt(sys.argv[1:], 'hcrn:l:wo:a:emi', ["reset="])
  #-l is one of many arguments I'm looking for
except getopt.error, err:
  print str(err)
  sys.exit(2)

for o, a in opts:
    if o in ("-l", "--log"):  #log
    logIt(a)
2

首先,getopt这个东西有点过时了,已经不推荐使用了。

建议你使用Python的optparse模块,或者更推荐的更新版argparse模块(在PyPI上有一个适用于Python 2.X的argparse的版本)。

第一个例子很清楚地展示了如何用optparse来解决你的问题:

http://docs.python.org/library/optparse.html

parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
                  help="write report to FILE", metavar="FILE")

(options, args) = parser.parse_args()
1

你的代码运行得很好,只要你稍微修改一下。
问题可能出在你的 logIt 函数上。
如果我把它改正一下(实际上它在你发布的形式下是无法正常工作的):

for o, a in getopts:
    if o in ("-l", "--log"):  #log
    logIt(a)  # Problem here a='Big'

用这个(并且使用 print):

for o, a in opts:
    if o in ("-l", "--log"):  #log
        print a  # No Problem here a=["Big String I want to as single argument"]

它就能输出应该输出的内容:

C:\Python26>python myscript.py -l "Big String I want to as single argument"
Big String I want to as single argument

所以你遇到的问题可能不是出在 getopt 上,而是你的 logIt 函数。

撰写回答