【发布时间】:2015-09-16 17:55:06
【问题描述】:
我有一个编译的 c++ 文件,我想在 ruby 的临时目录中运行它:
folder = Dir.mktmpdir
begin
puts folder
File.open("#{folder}/input.xml", 'w') { |file| file.write(builder.to_xml) }
ensure
system '.././program'
FileUtils.remove_entry folder
end
上面的代码正确地创建了所有需要的文件/文件夹,但没有运行系统调用,也没有产生错误。我已经尝试了这里列出的所有品种:Calling shell commands from Ruby,但似乎无法让它发挥作用。如果我注释掉文件删除行并手动执行上面列出的命令,程序可以正常运行。此外,如果我将文件保存到与 ./program 相同的位置,则 ./program 可以工作。是什么阻止我从子文件夹运行命令?
【问题讨论】:
-
使用
system可以让你检查它的返回值,所以如果你做了puts system '.././program'控制台会显示什么? True = 0 退出状态,False = 非零存在状态,nil = 执行失败。你也可以在 pry/irb 中尝试,而不需要 puts。 -
控制台有一个空行表示应该打印输出的位置
-
我不认为你的路径是正确的,我只是尝试使用来自各种目录的系统并且它正在工作。
-
对
system的调用不会“从”任何特定的子文件夹运行,我看不到您更改目录的位置?您是否希望在当前目录等于folder值的情况下运行该命令?您可能需要 cd - 请参阅 stackoverflow.com/questions/3339883/… - 还考虑使用完整路径,并更改您的 C++ 程序以接受它正在处理的文件的路径,而不是从当前目录加载文件。 -
@NeilSlater:或者更改 C++ 程序以接受标准输入上的 XML 并使用
Open3与之对话。
标签: ruby-on-rails ruby shell