0

我在提示符下运行这样的 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()

我需要对此做出什么改变?

4

3 回答 3

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.
于 2013-05-23T10:37:39.717 回答
2

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

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

例如:

import fileinput
for line in fileinput.input():
    print line
于 2013-05-23T10:23:25.107 回答
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 个字符长的变量名。

于 2013-05-23T10:46:18.240 回答