参数是前台传过来的,路径自带引号,考虑到空格问题,不能去
我知道可以不经过cmd调用,但出于个人理由此处不使用
// 这是模拟的参数cmdLine = `"d:/.../i_view64.exe" "E:/465f55d02d.jpg"`cmd := exec.Command("cmd.exe")cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/c " + cmdLine}var out bytes.Buffervar stderr bytes.Buffercmd.Stdout = &outcmd.Stderr = &stderrif err := cmd.Run(); err != nil {log.Println(fmt.Sprint(err) + ": " + stderr.String())} else {log.Println(out.String())}
输出结果为:2024/03/19 17:38:41 exit status 1: �ļ�����Ŀ¼�������������ȷ��
乱码我已经放弃了,谷歌了很久没有能解决的,大家有好办法欢迎回答。
改为
cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/c echo 123 && " + cmdLine}
很神奇,不报错了,但乱码还是不变的——虽然不知道什么内容
还有一个尝试:
cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/c chcp 65001 && " + cmdLine}
修改cmd的编码为utf8,没用!
另外
cmd := exec.Command("cmd.exe", "/c", fmt.Sprintf("chcp 65001 && %s", cmdLine))
这个也试了,直接报错,图片都没打开。
各位有何高见?
谢谢
在 Go 中调用第三方程序时,如果参数中包含空格或特殊字符,应该使用 exec.Command
的参数列表来提供这些参数,而不是将它们放入一个单独的字符串中。这是因为当你将它们放入一个字符串中时,你实际上是在创建一个单独的参数,而不是多个参数。
此外,如果你的路径中包含引号,你需要确保在将它们传递给 exec.Command
之前删除这些引号。否则,操作系统可能会误解你的意图,并导致错误。
你的代码应该像这样:
package mainimport ( "bytes" "fmt" "log" "os/exec" "strings")func main() { // 这是模拟的参数 cmdLine := `"d:/.../i_view64.exe" "E:/465f55d02d.jpg"` // 移除路径中的引号 cmdLine = strings.ReplaceAll(cmdLine, `"`, "") // 使用空格分割参数 args := strings.Split(cmdLine, " ") // 创建命令 cmd := exec.Command(args[0], args[1:]...) var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr if err := cmd.Run(); err != nil { log.Println(fmt.Sprint(err) + ": " + stderr.String()) } else { log.Println(out.String()) }}
在这个示例中,我们首先使用 strings.ReplaceAll
函数删除了路径中的引号。然后,我们使用 strings.Split
函数以空格为分隔符将命令行字符串分割为参数列表。最后,我们使用 exec.Command
的参数列表形式来创建命令。
这样,无论你的路径中是否包含空格或特殊字符,都应该能够正确地调用第三方程序。
至于你遇到的乱码问题,这可能是由于第三方程序或命令提示符窗口的字符编码设置不正确导致的。你可以尝试在调用第三方程序之前,使用 chcp 65001
命令将命令提示符窗口的字符编码设置为 UTF-8。但是,请注意,这种方法可能并不适用于所有情况,因为并非所有的第三方程序都支持 UTF-8 编码。
如果上述方法仍然无法解决乱码问题,你可能需要查看第三方程序的文档或源代码,以确定它如何处理输入和输出编码。如果可能的话,你可能需要修改第三方程序以支持 UTF-8 编码。
dll来源: https://www.irfanview.com/plugins.htm#UpdatedPlugins 我想调用WebP.dll来解析webp的图片提供给web页面展示,webp只是测试,目标格式为psd、jxl等浏览器不支持的格式 IDA: 比如这个 ScanWEBP_W ReadWebP_W 但我尝试调用程序就崩溃了(我没有相关知识,代码来源网络) 请问我该怎么调用呢? 谢谢
OpenResty 引用第三方 resty 库非常简单,只需要将相应的文件拷贝到 resty 目录下即可。 我们以 resty.http ( pintsized/lua-resty-http) 库为例。 只要将 lua-resty-http/lib/resty/ 目录下的 http.lua 和 http_headers.lua 两个文件拷贝到 /usr/local/openresty/lualib
所以比正确答案更重要的是,我真的很想知道为什么这不起作用。 下面是一些我无法使用的示例代码: 如果我像这样对着它打一个卷曲:
问题内容: 我知道有很多类似或相同的问题,但是我仍然无法理解/找到正确的方法来使用模块。Python是我最喜欢的语言,除使用导入外,我喜欢其中的所有内容:递归导入(当您尝试引用尚不存在的名称时),导入路径等。 因此,我有这种项目结构: 可以用作独立单位,但也应由导入。我现在在做什么,例如,在我编写中,即使用导入模块的完整路径。我这样做是因为,如果我使用-当从另一个包()中导入该模块时,它将不起作用
我尝试执行一个jar xuggle-xuggler.jar,但出现以下错误(我在jar目录中使用java-jar命令执行): 清单-版本:1.0 Ant-版本:Apache Ant 1.8.2 创建人:1.6.0_23-B23(Sun Microsystems Inc.) 实施-供应商:www.xuggle.com 实施-标题:xuggle-xuggler 实施-版本:5.4.0 主类:com.x
我有一个Spring应用程序,在其中我声明了我的类,如下所示: 但是当我试图到达其中一个restendpoint时,我得到一个错误:并且它指定这两个方法为问题。我的印象是,如果我更改了请求参数,Spring不会通过以下帖子抱怨它们是相同的:http://www.coderanch.com/t/598675/Spring/handling-http-request-parameters但显然它仍然如