我有一个像这样的python脚本:
#I'm treating with text files
input = str(raw_input('Name1: '))
output = str(raw_input('Name2: '))
inputFile = open(input, 'r')
outputFile = open(output, 'w')
def doSomething():
#read some lines of the input
#write some lines to the output file
inputFile.close()
outputFile.close()
因此,在shell中调用脚本后,必须输入输入文件的名称和输出的名称:
python script.py
但我想知道是否可以直接调用输入文件并在我调用脚本时设置输出文件的名称,因此调用的语法将类似于:
python script.py inputFile.txt outputFile.txt
然后,它与另一个相同,但不使用raw_input方法。 我该怎么做?
答案 0 :(得分:4)
您可以使用sys.argv:
传递给Python脚本的命令行参数列表。的argv [0] 是脚本名称(它取决于操作系统是否为 是否完整路径名)。如果使用-c执行命令 解释器的命令行选项,argv [0]设置为字符串 '-C'。如果没有脚本名称传递给Python解释器,argv [0] 是空字符串。
import sys
input_filename = sys.argv[1]
output_filename = sys.argv[2]
with open(input_filename, 'r') as input_file, open(output_filename, 'w') as output_file:
# do smth
此外,不要手动对文件执行close()
,而是使用with上下文管理器。
此外,对于更复杂的命令行参数处理,请考虑使用argparse模块:
argparse模块可以轻松编写用户友好的命令行 接口。该程序定义了它需要的参数,以及 argparse将弄清楚如何解析sys.argv中的那些。该 argparse模块还会自动生成帮助和使用消息 当用户给程序提供无效参数时会发出错误。
答案 1 :(得分:1)
您可以将输入和输出文件名作为参数传递给脚本。这是一个如何去做的片段。
import sys
#check that the input and output files have been specified
if len(sys.argv) < 3 :
print 'Usage : myscript.py <input_file_name> <output_file_name>'
sys.exit(0)
input_file = open(sys.argv[1])
output_file = open(sys.argv[2])
input_file.read()
output_file.write()
input_file.close()
output_file.close()
现在,您将脚本调用为myscript.py inputfile.txt outputfile.txt
请注意,您可能需要在打开文件之前检查输入和输出文件名是否已指定,如果没有则抛出错误。因此你可以