Python 读取命令行参数
我在提示符下运行python脚本,如下所示:Python 读取命令行参数,python,Python,我在提示符下运行python脚本,如下所示: python gp.py /home/cdn/test.in.......... 在脚本中,我需要获取输入文件的路径test.in,脚本应该从文件内容中读取和打印。这是工作正常的代码。但文件路径是用脚本硬编码的。现在我想将路径作为命令行参数调用 工作脚本 脚本不工作 在这方面我需要做什么更改?查看文件输入模块:它将命令行参数解释为文件名,并在一个步骤中将结果数据交给您 例如: import fileinput for line in filein
python gp.py /home/cdn/test.in..........
在脚本中,我需要获取输入文件的路径test.in
,脚本应该从文件内容中读取和打印。这是工作正常的代码。但文件路径是用脚本硬编码的。现在我想将路径作为命令行参数调用
工作脚本
脚本不工作
在这方面我需要做什么更改?查看
文件输入模块:它将命令行参数解释为文件名,并在一个步骤中将结果数据交给您
例如:
import fileinput
for line in fileinput.input():
print line
查看fileinput
模块:它将命令行参数解释为文件名,并在一个步骤中将结果数据交给您
例如:
import fileinput
for line in fileinput.input():
print line
虽然Brandon的答案是一个有用的解决方案,但代码不起作用的原因也值得解释
简而言之,字符串列表不是文件对象。在第一个脚本中,您打开一个文件并对该对象(即文件对象)进行操作。但是写['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.
虽然Brandon的答案是一个有用的解决方案,但代码不起作用的原因也值得解释
简而言之,字符串列表不是文件对象。在第一个脚本中,您打开一个文件并对该对象(即文件对象)进行操作。但是写['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.
在不适合您的脚本中,您只是没有在读取文件之前打开它。所以把它改成
#!/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个字符长的变量名。在不适合您的脚本中,您只是没有在读取文件之前打开它。所以把它改成
#!/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个字符长的变量名。请检查此相关问题。在您的非工作脚本中,这是做什么的argv[1:].read()
?argv是一个字符串列表,对吗?我认为它必须是data=open(sys.argv[1],“r”).read()
。检查此相关问题。在您的非工作脚本中,这是做什么的argv[1:].read()
?argv是一个字符串列表,对吗?我想它必须是data=open(sys.argv[1],“r”).read()
。回答得好,我向你的冷静致敬。我正在努力冷静地解释那些我很清楚但别人不清楚的事情+回答得好,我向你的平静致敬。我正在努力冷静地解释那些我很清楚但别人不清楚的事情+布兰登、奥涅西姆森伯恩和坎普。它奏效了…非常感谢。Thx Brandon,OnesimusUnbound和Kampu。它成功了…非常感谢。