Go 即使两个文件名完全相同,也没有找到文件错误?
我在Go中编写了一个爬虫程序,它在trendmicro网站上搜索安全报告(pdf格式),然后在找到pdf时使用wget下载pdf。之后,我使用从github()找到的库将pdf翻译成文本,然后将文本打印到终端。出于某种原因,该代码在前两个pdf中运行良好,但一旦它进入第三个pdf,它就会说找不到pdf,尽管它与其他pdf下载相同,并且位于同一目录中。程序跟踪如下所示:Go 即使两个文件名完全相同,也没有找到文件错误?,go,Go,我在Go中编写了一个爬虫程序,它在trendmicro网站上搜索安全报告(pdf格式),然后在找到pdf时使用wget下载pdf。之后,我使用从github()找到的库将pdf翻译成文本,然后将文本打印到终端。出于某种原因,该代码在前两个pdf中运行良好,但一旦它进入第三个pdf,它就会说找不到pdf,尽管它与其他pdf下载相同,并且位于同一目录中。程序跟踪如下所示: HTTP request sent, awaiting response... 200 OK Length: 2268867 (
HTTP request sent, awaiting response... 200 OK
Length: 2268867 (2.2M) [application/pdf]
Saving to: ‘rpt-2016-annual-security-roundup-a-record-year-for-enterprise-threats.pdf’
rpt-2016-annual-sec 100%[===================>] 2.16M 1.02MB/s in 2.1s
2019-02-20 15:25:07 (1.02 MB/s) - ‘rpt-2016-annual-security-roundup-a-record-year-for-enterprise-threats.pdf’ saved [2268867/2268867]
2019/02/20 15:25:07 open rpt-2016-annual-security-roundup-a-record-year-for-enterprise-threats.pdf : no such file or directory
exit status 1
我区分了这两个字符串,看看它们是否不同,但它们不是。再说一次,前两个下载很好。以下是代码中受影响的部分:
pdfName := strings.Replace(link, "https://documents.trendmicro.com/assets/rpt/", "", -1)
fmt.Printf("PDF name: %s\n", pdfName)
existingPdf := 0;
if len(pdfs) > 0 {
for i := 0; i < len(pdfs); i++ {
if pdfs[i] == pdfName {
existingPdf = 1;
}
}
}
if existingPdf == 0 {
pdfs = append(pdfs, pdfName)
command := "wget " + link
cmd := exec.Command("/bin/bash", "-c", command, ">", "/dev/null", "2>&1")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Run()
res, err := docconv.ConvertPath(pdfName)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}
pdfName:=字符串。替换(链接,“https://documents.trendmicro.com/assets/rpt/", "", -1)
fmt.Printf(“PDF名称:%s\n”,pdfName)
现有PDF:=0;
如果len(pdf)>0{
对于i:=0;i”、“/dev/null”、“2>&1”)
cmd.Stdout=os.Stdout
cmd.Stderr=os.Stderr
cmd.Run()
res,err:=docconv.ConvertPath(pdfName)
如果错误!=零{
log.Fatal(错误)
}
fmt.Println(res)
}
如果您想要完整的代码和/或想要运行它,我已经将其放在pastebin()中,您不能将
“>”、“/dev/null”、“2>&1”
作为参数传递给bash,如果您想让bash将它们解释为命令的一部分,它们必须在命令中,但不幸的是,它没有阻止FNF的错误不,那只是我看到的一个基本错误。另外,为什么您首先要使用wget
,而不是直接下载文件?我会确保所有内容都在同一个工作目录中,并从命令行验证该文件是否存在。wget
不错,它只是为您的问题添加了更多变量。GoHTTP包工作得非常好。您是否验证了shell将为您剥离的名称中没有隐藏的空格?空格很可能位于末尾,而不是连字符所在的位置。只需使用fmt.Printf(“PDF名称:%q\n”,pdfName)
而不是猜测哪些字符可能在那里,哪些字符可能不在那里。您不能将“>”、“/dev/null”、“2>&1”作为参数传递给bash,如果希望bash将它们解释为命令的一部分,它们必须在命令中。我从命令中删除了重定向,但不幸的是,它没有阻止FNF的错误不,那只是我看到的一个基本错误。另外,为什么您首先要使用wget
,而不是直接下载文件?我会确保所有内容都在同一个工作目录中,并从命令行验证该文件是否存在。wget
不错,它只是为您的问题添加了更多变量。GoHTTP包工作得非常好。您是否验证了shell将为您剥离的名称中没有隐藏的空格?空格很可能位于末尾,而不是连字符所在的位置。只需使用fmt.Printf(“PDF名称:%q\n”,pdfName)
,而不是猜测其中可能包含或不包含哪些字符。