【问题标题】:Using subprocess to run HTTrack from python in Windows在 Windows 中使用子进程从 python 运行 HTTrack
【发布时间】:2016-01-13 21:19:35
【问题描述】:

我正在编写一个网络抓取 python 脚本,我希望它能够做的一件事是让它拍摄某些页面的快照(所有 html、样式表、以及正确离线查看该特定页面所需的图像)。似乎 HTTrack 是一个很好的方法,我想我可以使用

从 python 脚本中调用它
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: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape”

我认为这是我无法正确理解 subprocess 的问题,因为我可以通过 Windows 命令提示符让 HTTrack 工作。谁能帮我理解使用子流程的正确方法?

【问题讨论】:

  • "\tmp\example" 中的"\t" 根本不会跳出来吗?至于\U,您似乎正在使用Python 3,并且没有向我们显示位置2-3 中包含"\U" 的字符串的行,例如"C:\Users"。无论如何,只需使用 [r]aw 字符串即可避免此问题 - 除非路径以反斜杠结尾,在这种情况下,请使用常规字符串并用另一个反斜杠转义每个反斜杠,例如 "C:\\"

标签: python windows subprocess httrack


【解决方案1】:

感谢eryksun 的评论解决。 subprocess 语法根本不是问题,而是我没有小心转义所有反斜杠。在这些字符串前面拉r 以使它们成为原始字符串,从而很好地修复了我的代码。

【讨论】:

  • 使用原始字符串文字,以避免转义反斜杠:r'c:\U'
  • @J.F.Sebastian 是的,我就是这么做的 :)
猜你喜欢
  • 2016-04-06
  • 2010-10-29
  • 2020-05-19
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
相关资源
最近更新 更多