Длинное имя файла Python 3 в качестве аргумента (Python разделяет его)
У меня была проблема с получением аргумента командной строки в окнах с длинным именем файла и передачей его в функцию.
Короче говоря, длинное имя файла, содержащее пробелы, разделено на отдельные части.
Я сделал смешанный кусочек кода, чтобы дать мне командную строку в целом, но это далеко от идеала, поскольку он работает для нескольких параметров, он не работает для LFN с пробелами. (cludge был создан для другого скрипта, я только что скопировал его в этот) Я часами искал в Google, пытаясь выяснить это, так как наверняка кто-то другой решил это. Я пытался использовать ArgParse, но не мог получить это, чтобы дать мне имя файла, не разделяя его либо.
Будет ли кто-то достаточно хорош, чтобы показать мне некоторый код, который демонстрирует получение командной строки в точности как есть (без имени скрипта), а также получение полного имени файла.
Спасибо адам
[править..] Я попытался поместить цитаты вокруг него, и он все еще не удался. Из тестирования кода я знаю, что он разбивает входные данные на пробелы и удаляет кавычки. пример из другого теста:
код test.py:
import sys
print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
for x in range(0, len(sys.argv)):
print("->" + sys.argv[x])
выход:
H:\bin>test "test lfn.txt"
Number of arguments: 3 arguments.
Argument List: ['H:\\bin\\test.py', ' test', 'lfn.txt']
->H:\bin\test.py
-> test
->lfn.txt
#
[править 2] Я думаю, что это ошибка Python в Windows, так как двойные кавычки работают, вроде:
H:\bin>test ""test lfn.txt""
Number of arguments: 2 arguments.
Argument List: ['H:\\bin\\test.py', ' "test lfn.txt"']
->H:\bin\test.py
-> "test lfn.txt"
Оригинальный код размещен ниже.
###############################################################################
# Renames a single file to ISO date format: YYYYMMDD-HHMMSS #
###############################################################################
import datetime, os, sys
def error_filename():
print("filename doesn't exist maybe.")
sys.exit(1)
def error_args():
print("Renames a single file to ISO date format: YYYYMMDD-HHMMSS")
print("Requires 1 parameter, the filename to rename")
sys.exit(2)
def error_rename():
print("Unable to rename")
sys.exit(3)
cmds = ""
for x in range(1, len(sys.argv)):
cmds = cmds + sys.argv[x]
cmds = cmds.strip()
if cmds != "":
d = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
if os.path.isfile(cmds):
fn = cmds.split(os.extsep)
fn[0]=d
newname = d + "." + fn[1]
print(cmds + " -> " + newname)
try:
os.rename(cmds, newname)
except:
error_rename()
else:
error_filename()
else:
error_args()
1 ответ
У меня была ошибка, потому что Windows 7 по умолчанию открывал файлы python в редакторе, я изменил его вручную в реестре, чтобы открыть с помощью python. Сделав чистую установку на другом компьютере и позволив установщику python установить путь и т. Д., Он работал нормально. Проблема заключается в настройке реестра Windows.