Получение входного пути и файла, выходного пути и файла из аргумента командной строки в Python - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь запустить мой маленький скрипт на 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)

Если я пытаюсь запустить программу, я получаю "IndexError: ошибка «вывести индекс за пределы диапазона» в строке 'inputfile = sys.argv [1]'.

Любая идея, как это исправить и заставить мою программу работать, введите команду выше, где pdweb_convert - это мойсценарий, входной файл будет что-то вроде input.txt и выходной файл с любым именем, так как он будет создан впоследствии по моей команде.

Также, как заставить его напечатать предупреждающее сообщение, если пути не существуют или входной файл не существует, и, как я уже говорил, я хочу, чтобы выходной файл был автоматически сгенерирован (создан) с использованием имени Iдайте это в командной строке, например:

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

Как именно я могу кодировать их в своем скрипте, я начал программировать на Python сегодня утром, поэтому я ультра новичок.Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018
python ./pdweb_convert.py -i /path_to_file/input_file_name -o /path_to_file/output_file_name

(я предполагаю, что вы также написали python в начале этой команды.)

Проблема в том, что ваш sys.argv возвращает список пяти элементов, и вызвонят 1 и 2 index, которые -i и /path_to_file/input_file_name.Вместо этого вы должны были назвать 2 и 4 indexed.Когда я запустил ваш код, он не вызвал никакой ошибки списка, но логически он ошибся

C:\Users\Desktop>python x.py -i /path_to_file/input_file_name -o /path_to_file/output_file_name
Traceback (most recent call last):
  File "x.py", line 4, in <module>
    with open(inputfile, 'r') as i, open(outputfile, 'w') as o:
FileNotFoundError: [Errno 2] No such file or directory: '-i'
0 голосов
/ 29 ноября 2018

В 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'] и проверить, существуют ли эти файлы в файловой системе.

...