2016-01-13 2 views
0

Я нахожусь в процессе написания скрипта python скремблирования в сети, и одна из вещей, которые я хотел бы сделать, - это сделать снимок определенных страниц (все html, таблицы стилей и изображения, необходимые для просмотра этой конкретной страницы в автономном режиме). Похоже HTTrack это хороший способ сделать это, и я думал, что я мог бы назвать его из сценария питона, используяИспользование подпроцесса для запуска HTTrack из python в Windows

subprocess.call(["httrack", "http://www.example.com", "-O", "\tmp\example"]) 

Но пытающегося сделать это приводит к «FileNotFoundError: [WinError 2] Система не может найти указанный файл ". Я также попытался дать ему полный путь к файлу,

subprocess.call(["C:\Program Files\WinHTTrack\httrack.exe", "http://www.example.com", "-O", "\tmp\Example"]) 

но я получаю ошибку «SyntaxError: (ошибка юникода)„unicodeescape“кодек не может декодировать байт в позиции 2-3: усеченный \ UXXXXXXXX побег «

Я думаю, что это проблема со мной, не понимая правильно subprocess, так как я могу заставить HTTrack работать через командную строку Windows. Может ли кто-нибудь помочь мне понять правильный способ использования подпроцесса?

+1

'' \ t "' in '" \ tmp \ example "' не выпрыгивает на вас вообще? Что касается '\ U', кажется, вы используете Python 3 и не показываете нам строку со строкой, содержащую' '\ U" 'в позиции 2-3, например' 'C: \ Users" '. Во всяком случае, просто используйте строки [r] aw, чтобы избежать этой проблемы - за исключением того, что путь заканчивается обратным слэшем, в этом случае используйте обычную строку и избегайте каждой обратной косой черты с помощью другой обратной косой черты, такой как '' C: \\ "'. – eryksun

ответ

0

Решено благодаря комментарию eryksun. Это не было проблемой с синтаксисом subprocess, а скорее, что я не был осторожен в том, чтобы избежать всех моих обратных косых черт. Вытягивая r перед этими строками, чтобы сделать их сырыми строками, исправил мой код просто отлично.

+1

использовать необработанные строковые литералы, чтобы избежать сбрасывания обратных косых черт: 'r'c: \ U'' – jfs

+0

@ J.F.Sebastian Yup, вот что я сделал :) – Empiromancer

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