0

我有一个这样的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 方法。我怎样才能做到这一点?

4

2 回答 2

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()处理文件,而是使用上下文管理器。

此外,对于更复杂的命令行参数处理,请考虑使用argparse模块:

argparse 模块使编写用户友好的命令行界面变得容易。该程序定义了它需要的参数,而 argparse 将弄清楚如何从 sys.argv 中解析出这些参数。argparse 模块还自动生成帮助和使用消息,并在用户给程序无效参数时发出错误。

于 2013-09-01T12:27:49.100 回答
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

请注意,您可能需要在打开文件之前检查输入和输出文件名是否已指定,如果没有则抛出错误。因此你可以

于 2013-09-01T12:28:01.677 回答