передавая параметр/переменную пути из пакетного файла в python, sys.argv[] ony выдает последний каталог, а не всю строку

#python #batch-file #path #sys

Вопрос:

Я создал пользовательскую команду scan для терминала Windows. Моя цель-автоматически переместить мои сканы в определенный каталог. Я жестко закодирую свой путь, но в случае, если я захочу переместить свои сканы в другой каталог, я включил параметр 2 (параметр 1 «запуск» для выполнения). Мой пакетный файл передает путь в виде строки в мой скрипт python.

Я знаю это, потому что, когда я пишу

 scan start "C:/path/to/target/dir/"
 

в моем терминале Windows он выплевывает следующее, чтобы запустить мой скрипт.

 python "C:UsersMY USERNAMEmy_scriptsscan.py" start C:/path/to/target/dir/
 

К сожалению, я не могу «прочитать» весь путь со следующим кодом:

 print(Path(sys.argv[2]).stem)
 

В этом случае результатом является dir

print(Path(sys.argv[0]).stem) = scan

print(Path(sys.argv[1]).stem) = start

print(Path(sys.argv[2]).stem) = dir

Почему я не получаю весь путь и как мне его получить? Я хочу что-то вроде этого:

print(Path(sys.argv[2]).stem) = C:/path/to/target/dir/

Комментарии:

1. Почему вы используете stem ? Он делает именно то, что вы показываете, т. Е. В полученном результате нет ничего неправильного/неожиданного; если вы хотите получить другие результаты, не используйте stem . Ознакомьтесь с документацией docs.python.org/3/library/…

2. @barny, поскольку я новичок в prgramming и python, я не так хорошо знаком со многими доступными модулями, и мне трудно понять, откуда может возникнуть моя проблема. Теперь, когда вы упомянули об этом, я чувствую себя идиотом :D, Но я буду напоминать себе почаще читать документацию. Спасибо!

Ответ №1:

Вы действительно читаете весь путь. Но затем вы останавливаете его, сокращая до реж. Используйте следующее

 print(Path(sys.argv[1]))