我在提示符下运行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()
我需要做些什么改变?
答案 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
尚未定义。上述变化可以解决这个问题。