gpt4 book ai didi

lua - 为什么程序文件中的应用程序不能在 lua 中使用 os.execute 运行?

转载 作者:行者123 更新时间:2023-12-04 22:32:12 25 4
gpt4 key购买 nike

我正在尝试使用 Lua 的 os.execute() 运行可执行文件功能。如果我执行以下操作,则它不起作用:

os.execute("C:\\\Program Files\\\Movie Maker\\\moviemk.exe")

但是,如果我将我的 lua 文件放在与 moviemk.exe 相同的路径中在然后它可以调用它。

任何想法为什么会这样?

附言我使用的是 Windows XP SP3

最佳答案

这是命令 shell 的经典问题。这并不是 Windows 特有的问题,除了在 *nix 上,人们从来没有真正养成在文件名中放置空格的习惯,而 Windows 将空格放置在几个默认的系统位置,例如 C:\Program Files .

发生的事情是os.execute(str)是根据 ANSI C 函数实现的 system(str) ,它在 Windows 上试图复制输入 "cmd /C "..str 的效果到命令提示符。 (在 *nix 上,它使用/bin/sh -c 而不是 cmd/C。)

经典的问题是,这必须在空格处拆分完整的命令字符串,以决定要运行的程序以及它的参数是什么。

您的原始示例:os.execute("C:\\Program Files\\Movie Maker\\moviemk.exe")有效地变成了cmd /c c:\program files\movie maker\moviemk.exe ,在将其拆分为空格后,CMD 试图找到一个名为 c:\program 的程序使用名为 files\movie 的参数执行和 maker\moviemk.exe .这不是你想要的。

解决方案是对引用更加谨慎。

我会这样写:

os.execute [["C:\Program Files\Movie Maker\Moviemk.exe"]]

如果要提供额外的命令行参数,我会在每个参数周围使用双引号,并在参数之间使用一个空格。使用长字符串语法 [[...]]具有反斜杠不是特殊字符的优点,因此您不需要额外的倾斜牙签,从而更难阅读字符串文字。

在每个参数周围使用双引号应该在 Windows 和 *nix 上都可以使用,当然,虽然在两个平台上更难找到相同的命令。

另一个需要注意的细节是 \Programs Files可能不在 C: .甚至可能没有名为 C: 的磁盘. (我的工作 PC 从 E: 启动,我发现更多错误的程序是这样的。)了解正确路径名的最简单方法是使用环境变量 ProgramFiles。 .还有很多其他的方法。

关于lua - 为什么程序文件中的应用程序不能在 lua 中使用 os.execute 运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3587788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com