在Python中从命令行参数获取输入路径和文件,输出路径和文件

时间:2018-11-29 09:39:13

标签: python input command-line arguments output

我试图通过以下命令运行我的小python脚本:

./pdweb_convert.py -i /path_to_file/input_file_name -o /path_to_file/output_file_name

这是我的代码:

import sys
inputfile = sys.argv[1]
outputfile = sys.argv[2]
with open(inputfile, 'r') as i, open(outputfile, 'w') as o:
    o.seek(0)
    o.truncate()
    for line in i:
        if '0x' in line:
            new_line = line[9:50]
            new_line = new_line.strip().replace(' ', '').replace('\n', '')
            try:
                new_line = bytearray.fromhex(new_line).decode("ascii")
            except Exception:
                new_line = ''
            o.write(new_line)
        else:
            o.write(line)

如果我尝试运行程序,则在“ inputfile = sys.argv [1]”行上出现“ IndexError:列表索引超出范围”错误。

任何想法如何解决此问题并通过键入上述命令使我的程序正常运行,其中pdweb_convert是我的脚本,输入文件将类似于input.txt,输出文件的任何名称,因为它将随后在我的命令中创建。

如果路径不存在或输入文件不存在,又如何使它显示警告消息,如我之前所说,我希望使用我给它的名称自动生成(创建)输出文件命令行,例如:

pdweb_convert.py -i C:\Users\Work\Documents\input.txt -o C:\Users\Work\Documents\outputexample.txt

我该如何在脚本中编写代码?我今天早上开始用Python编程,所以我是个超级初学者。谢谢!

2 个答案:

答案 0 :(得分:1)

Python有一个名为optparse的库,可以轻松实现

您可以像这样使用它:

#!/usr/bin/python

import optparse

parser = optparse.OptionParser()
parser.add_option('-i', help='arguments', dest='infile', action='store')
parser.add_option('-o', help='arguments', dest='outfile', action='store')
(opts, args) = parser.parse_args()
print(opts)

输出:

{'infile': 'infile.txt', 'outfile': 'outfile.txt'}

因此,您只需抓住opts['infile']opts['outfile']并检查文件系统中是否存在这些文件。

答案 1 :(得分:0)

python ./pdweb_convert.py -i /path_to_file/input_file_name -o /path_to_file/output_file_name

(我假设您还在此命令的开头也编写了python。)

问题是您的sys.argv返回了一个五个元素的列表,而您正在调用1的{​​{1}}和2索引, -i。取而代之的是,您应该调用/path_to_file/input_file_name2索引。当我运行您的代码时,它没有引发任何列表错误,但在逻辑上却出错了

4