阅读命令行Args

时间:2013-05-23 10:19:28

标签: python

我在提示符下运行python中的脚本:

python gp.py /home/cdn/test.in..........

在脚本内部,我需要获取输入文件test.in的路径,脚本应该从文件内容中读取和打印。这是正常运行的代码。但是文件路径在脚本中是硬编码的。现在我想将路径称为命令行参数。

工作脚本

             #!/usr/bin/python
             import sys
             inputfile='home/cdn/test.in'
             f = open (inputfile,"r")
             data = f.read()
             print data
              f.close()

脚本不起作用

              #!/usr/bin/python
              import sys
              print "\n".join(sys.argv[1:])
              data = argv[1:].read()
              print data
              f.close()

我需要做些什么改变?

3 个答案:

答案 0 :(得分:3)

虽然Brandon的答案是一个有用的解决方案,但代码不起作用的原因也值得解释。

简而言之,字符串列表不是文件对象。在第一个脚本中,您open一个文件并对该对象(它是一个文件对象)进行操作。但是写['foo','bar'].read()并没有任何意义 - 列表不是read()能力,也不是字符串 - 'foo'.read()显然是无稽之谈。这类似于在第一个脚本中编写inputfile.read()

为了明确说明,以下是从命令行中指定的所有文件中获取所有内容的示例。这不使用fileinput,因此您可以确切地看到实际发生的情况。

# iterate over the filenames passed on the commandline
for filename in sys.argv[1:]:
    # open the file, assigning the file-object to the variable 'f'
    with open(filename, 'r') as f:
        # print the content of this file.
        print f.read()

# Done.

答案 1 :(得分:2)

查看fileinput模块:它将命令行参数解释为文件名,并在一步中将结果数据交给您!

http://docs.python.org/2/library/fileinput.html

例如:

import fileinput
for line in fileinput.input():
    print line

答案 2 :(得分:0)

在不适合您的脚本中,您只是在阅读之前不打开文件。所以把它改成

          #!/usr/bin/python

          import sys

          print "\n".join(sys.argv[1:])
          f = open(argv[1:], "r")
          data = f.read()

          print data
          f.close()

此外,f.close()这会导致错误,因为f尚未定义。上述变化可以解决这个问题。

顺便说一句,根据编码标准,你应该使用至少3个字符长的变量名。