我有两个文件main.raku,TestMod.rakumod位于一个目录中C:\\Users\\suman。
TestMod.rakumod
unit module TestMod;\nsub add($a, $b) is export {\n $a + $b\n}\nRun Code Online (Sandbox Code Playgroud)\nmain.raku
use lib $*PROGRAM.dirname;\nuse TestMod;\n\nsay add(8,9)\nRun Code Online (Sandbox Code Playgroud)\n我想TestMod从main脚本文件调用模块中的一些函数。当我运行脚本时,我收到此错误
===SORRY!=== Error while compiling c:\\Users\\suman\\main.raku\nread from dirhandle failed: 123\nat c:\\Users\\suman\\main.raku:2\nRun Code Online (Sandbox Code Playgroud)\n这是我的操作系统特定信息:
\nHost Name: SUMANKHANAL\nOS Name: Microsoft Windows 10 Pro\nOS Version: 10.0.19043 N/A Build 19043\nOS Manufacturer: Microsoft Corporation\nOS Configuration: Standalone Workstation\nOS Build Type: Multiprocessor Free\nRegistered Owner: N/A\nRegistered Organization: N/A\nProduct ID: 00331-20350-00000-AA867\nOriginal Install Date: 10/19/2020, 3:36:49 PM\nSystem Boot Time: 12/7/2021, 1:00:40 PM\nSystem Manufacturer: Dell Inc.\nSystem Model: Inspiron 5379\nSystem Type: x64-based PC\nProcessor(s): 1 Processor(s) Installed.\n [01]: Intel64 Family 6 Model 142 Stepping 10 GenuineIntel ~1792 Mhz\nBIOS Version: Dell Inc. 1.17.0, 8/18/2021\nWindows Directory: C:\\WINDOWS\nSystem Directory: C:\\WINDOWS\\system32\nBoot Device: \\Device\\HarddiskVolume1\nSystem Locale: en-us;English (United States)\nInput Locale: en-us;English (United States)\nTime Zone: (UTC+05:45) Kathmandu\nRun Code Online (Sandbox Code Playgroud)\nRakudo 具体信息(从 rakudo.org 安装):
\nWelcome to Rakudo\xe2\x84\xa2 v2021.10.\nImplementing the Raku\xc2\xae Programming Language v6.d.\nBuilt on MoarVM version 2021.10.\nRun Code Online (Sandbox Code Playgroud)\n然而,这种情况在 Linux 中是有效的。请参阅此处的MWE 。
\n这是 Windows 特定问题/错误还是我遗漏了什么?
\n长话短说一个可能会帮助您找到答案的答案。
\n不是很多。我已经很多年没有使用 Windows 进行开发了。我以前没有见过这个错误。
\n我只是决定看看我能找到什么。我发现了一些东西,阅读了字里行间的内容,然后……最终得到了这个答案。
\nread from dirhandle failed: 123谷歌搜索“从 dirhandle 读取失败:123”为我列出了两个匹配项。
\n其中之一就是这样。尽管我们正在努力,但我不确定这是否特别有帮助!
\n另一场比赛是:
\n\n\ngithubmemoryhttps://githubmemory.com \xe2\x80\xba ... \xc2\xb7 翻译此页面
\n\xe2\x8b\xae
\nohmycloud 简介 - githubmemory
当我点击它时,它没有我搜索的错误消息。
\n但是单击\xe2\x8b\xae会显示一个About this result弹出窗口,并且cache该弹出窗口底部的一个按钮链接到搜索匹配的页面的早期版本。(这是一个通用技巧,用于了解搜索结果何时不包含您刚刚搜索的内容。)
还有那个页面(我可以通过这个 URL看到它 YMMV)包含此匹配项:
\n\n\n当以管理员身份执行上述脚本时,失败
\nread from dirhandle failed: 123
但这还不是决定性的。嗯。
\ngithubmemory.com只是 GH 的副本。所以我发现这是这个问题的副本。然后更具决定性的。也就是说,问题的开场白 ohmycloud 以以下结论结束:
\n\n这实际上是一个访问拒绝错误
\n
嗯。真的吗?
\n请考虑调查这个角度,也许编辑你的问题来总结你的结论。但请先继续阅读,因为有理由怀疑这是访问错误,如下所示。
\n123我的下一个研究角度是确定错误代码的确切含义。
\n我发现它read from dirhandle failed:来自 MoarVM,这表明错误代码来自GetLastError(),我发现它来自 Windows API,我找到了这个参考条目:
\n\n文件名、目录名或卷标语法不正确。
\n
唔。为什么ohmycloud要讲访问错误?
\n我们也许应该尝试调查是否是这样只是”无效语法而不是其他诸如访问错误之类的东西。
\n请尝试以下操作,并考虑是否值得将一些结果(至少其中一个)粘贴到您的问题中:
\nsay $*PROGRAM.dirname.raku;\nchdir $*PROGRAM.dirname;\nsay $*PROGRAM.dirname.IO.raku;\nRun Code Online (Sandbox Code Playgroud)\n在更广泛地搜索(放弃123)时,我发现了另一个可能感兴趣的匹配项。
(它实际上确实有同样的错误,所以我不明白为什么我尝试的第一个谷歌没有列出它,但无论如何。)
\n这是nickcygx在 #moarvm 频道上于2016 年发表的评论
\n\n最终因 SORRY: read from dirhandle failed: 123 而死亡
\n
Windows 上也是如此。人们可以从错误消息中看出这一点,但当天晚些时候也在 IRC 频道上确认了这一点:
\n\n\n“从 dirhandle 读取失败”的事情发生在 Windows ifdefed 块内
\n
事实上,cygx 表示他们在错误Class isn't smartmatch against role Defined in module中收到了测试用例的错误消息。
\njnthn对此失败的响应是:
\n\n\n这……毫无意义oO
\n
(这是对你的SO的很好的总结。)
\njnthn 还说了关于 cygx 错误的另一件事:
\n\n\n我已经把修复 hyper/race 的事情推迟了好几个月了。:)
\n
所以,也许,或者更抒情地作为最后一次机会远投黑马,也许MoarVM 的内部存在一些hyper/相关的问题,这些问题在 Windows 上与模块加载相关?race
如果您可以尝试错误报告中的“Minimal testcase\xe2\x80\x8b”,将会很有帮助。你明白123错误了吗?
如果你这样做了,那么也许(甚至更长的时间)值得有人尝试与 cygx 取得联系?不幸的是,这个昵称cygx最后一次出现在 #moarvm 上是在 2019 年。所以我用谷歌搜索了一下cygx raku。我在 8 个月前的昵称下发现了一条关于 Raku 的 8 个月前的评论。(我发现我的回答不恰当。对不起,cygx。)
他们的第一条评论是:
\n\n\n指向
\nuse lib ...当前用户无权访问的[包含]文件的目录并不是一个好主意。
这表明您最好确保您指向的目录lib不是一个目录,因为C:\\Users\\suman在一般情况下,该目录可能包含 Rakudo 编译器无法访问的文件。(是否属于这种情况取决于您的系统设置以及您拥有的文件,但简单的解决方案是确保您仅指向libRaku 代码专用的目录。)
他们的最后一条评论(在这个答案下面)是一个指向要点的链接,其中的行如下:
\nC:\\Users\\ugexe>raku --ll-exception -e "use lib \'.\'; use Test;"\nread from dirhandle failed: 123\n at SETTING::src/core.c/Rakudo/Internals.pm6:1345 (C:\\Users\\ugexe\\.rakudobrew\\moar-2021.10\\install\\share\\perl6\\runtime/CORE.c.setting.moarvm:next)\n from SETTING::src/core.c/Rakudo/Internals.pm6:1374\n.\n.\n.\nRun Code Online (Sandbox Code Playgroud)\n我不知道如何解释这个要点,但我可以看出他们的要点:
\n显示它们产生相同的 Windows 系统错误 ( 123),除了use Test;;之外什么都没有。
显示如果传递到 Windows,可能在语法上无效的路径 ( C:\\Users\\ugexe\\.rakudobrew\\moar-2021.10\\install\\share\\perl6\\runtime/CORE.c.setting.moarvm:next)。我的猜测是它们没有传递到 Windows,而是只是以这种方式构建作为显示错误的一部分。但这只是一个猜测。
.rakumod将文件移动到separate folder内部C:\Users\suman并use lib "<separate folder>"从main脚本导入是可行的。就我而言,当我移动TestMod.rakumod并C:\Users\suman\rakulib修改main脚本时,如下所示:
use lib "rakulib";
use TestMod;
say add(8,9)
Run Code Online (Sandbox Code Playgroud)
有用。
Desktop。但我觉得很奇怪!因为python与我的问题类似的两个文件工作正常,没有任何问题,即使它们都在文件夹中C:\Users\suman。
file1.py
def add(a,b):
return a + b
Run Code Online (Sandbox Code Playgroud)
file2.py
from file1 import add
print(add(8,9))
Run Code Online (Sandbox Code Playgroud)
所以我也期待同样的事情raku。不幸的是事实并非如此。
read from dirhandle failed正如许多 rakoons 指出的那样,这似乎是访问拒绝错误。我很想知道我们如何从 raku 内部解决这个问题。
致谢:@jubilatious1 和@chenyf 提出的想法有效。所以我在这里把它们结合起来。
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |