2016-03-15 2 views
1

Я использую библиотеку Pyunpack в сценарии Python. Оказывается, это просто использует CLI p7zip для извлечения файлов 7zip. Проблема заключается в том, что если сценарий запускается в дубликат файла, p7zip хочет знать, следует ли перезаписывать, запрашивать пользователя и прерывать скрипт.P7zip, предотвращающий запрос командной строки

Есть ли способ, которым я могу предварительно выполнить запрос на перезапись от Pyunpack, чтобы мой код выполнялся? Или, если это невозможно, есть ли способ передать подсказки CLI обратно через Python, чтобы программа могла, по крайней мере, продолжить вход пользователя?

Если я вхожу ту же команду, сценарий Python использует в Баш, я получаю это:

7z x -o/home/path/to/extract/directory -- /home/path/to/file.7z

file /something/in/the/7z/directory/filename.thing already exists. Overwrite with filename.thing? 
(Y)es/(N)o/(A)lways/(S)kip all/A(u)to rename all/(Q)uit? 

Однако, когда я исполню ее в Python, Python просто висит в подпроцесс во время ожидания ответ на это приглашение.

Я хотел бы использовать опцию автоматического переименования всех автоматически. Какие-либо предложения?

+0

Можете ли вы передать аргументы? Таким образом, вы можете использовать флаг '-y'? –

+0

К сожалению, Pyunpack не поддерживает передачу аргументов. Патул, похоже, не документирует это. –

ответ

1

Я нашел решение! Спасибо, Etan за то, что указал мне в правильном направлении.

Мне нужно было открыть patoolib и отредактировать p7zip.py.

Где она определяет extract_7z я жестко закодировал -y флаг закомментировав:

if not interactive: 
    cmdlist.append('-y') 

и добавление cmdlist.append('-y') прямо под cmdlist = [cmd, 'x'].

Теперь мой код работает бесперебойно!

Смежные вопросы