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

时间:2011-05-16 05:21:59

标签: python command-line-arguments

我正在尝试将整个字符串作为参数传递给python脚本。我遇到的问题是Python假设我只想要字符串的第一个单词。

在下面的示例中,-l arg代表日志,我希望它捕获整个字符串。

示例:

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 :(得分: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 :(得分: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功能。

答案 2 :(得分: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)