【问题标题】:How do I launch an exe file in processing?如何在处理中启动 exe 文件?
【发布时间】:2020-05-04 21:41:12
【问题描述】:

我创建了一个名为 leaderboard 的 python 文件,并使用 pyinstaller 将它变成了一个 .exe 文件。这个 .exe 文件位于我的草图的数据文件夹中名为 dist 的文件夹中。我首先尝试使用 launch() 函数启动文件,虽然这没有给我任何错误,但它没有执行文件。

launch("data/dist/leaderboard.exe");

对于我的下一次尝试,我尝试使用 exec 函数。

exec("data/dist/leaderboard.exe");

这给了我错误代码:尝试 data/dist/leaderboard.exe 时出现异常

接下来,我决定在使用启动功能时使用完整的文件路径。

launch("C:/Users/Tahseen/Documents/cs corsework 2/Bloodlust/data/dist/leaderboard.exe");

这导致重复弹出标题为“检测到致命错误”和标题为“无法执行脚本排行榜”的弹出窗口。使用 exec() 也给了我这个结果。

经过研究,我发现一种适用于少数人的解决方案是使用双 \ 而不是单 / 但这对我没有任何作用。

我确认从文件夹中手动打开文件时可以正确执行,所以我认为问题出在我的代码中。

更新:我认为在前两种情况下无法找到文件 leaderboard.exe 但是我不知道为什么当我将随机字符串放在括号内时,同样的事情发生了。这让我想到了第二个问题:有没有办法从项目文件夹中执行文件,即没有整个文件路径?

【问题讨论】:

  • 也许 exe 需要访问其他同级文件?您可能需要告诉Processlaunch() 返回)使用哪个工作目录。试试this
  • 你是对的,exe文件在同一个文件夹中使用了2个文本文件。我如何将这一点告诉正在处理的进程?
  • 我现在无法测试这个,但我会尝试上面链接中的 sn-p:Process p = null; ProcessBuilder pb = new ProcessBuilder("leaderboard.exe"); pb.directory(new File("C:/Users/Tahseen/Documents/cs\ corsework\ 2/Bloodlust/data/dist/"));p = pb.start(); 或者你也可以尝试在你的 python 脚本中使用绝对路径,但它不是一个非常灵活的选择。 (通常还要注意空格和其他可能需要在 Java 中转义的特殊字符)。不幸的是,我目前无法提供详细的答案。希望这是有道理的/有人可以回答。

标签: processing


【解决方案1】:

感谢@George Profenza,我意识到问题在于 python 文件需要外部文本文件才能运行。虽然我无法找到一种方法来引用进程使用哪个目录,但我发现我可以使用客户端和服务器,而不是使用文本文件在处理和 python 之间发送数据。我通过导入 processing.net 和 socket 在处理项目上创建了一个服务器,在 python 文件上创建了一个客户端。至于在不手动输入完整文件路径的情况下启动 exe 文件,我使用 dataPath("") 返回数据文件夹的路径,然后将“/dist/leaderboard.exe”添加到结果字符串中。这样,在导出应用程序时,程序应该仍然可以工作。

String path = dataPath("");
launch(path+"/dist/leaderboard.exe");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2019-10-07
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多