【发布时间】:2015-06-18 05:36:37
【问题描述】:
我有一个由 poolboy 工人产生的函数
基本概述:
- Phoenix Controller 用数据调用 Dispatcher
- Dispatcher 将数据传递给 Poolboy 工作人员
- Poolboy 工作人员使用要处理的给定数据生成一个新进程
- 新进程使用数据调用系统命令(本例中为 wget)
我遇到的问题是,当我运行 ExUnit 测试时,它一直到生成的进程都很好,我可以输出数据(使用 IO.inspect)。
当我运行 System.cmd("wget".... 当 ExUnit 测试运行时,我在终端中看到 wget 输出,因此该命令实际上正在运行,但是我在该命令之后所做的任何事情都没有不跑。
如果我这样做,那么在我的工人中:
IO.puts "hello"
System.cmd("wget", opts)
IO.puts "world"
然后我看到 hello 我看到 wget 的输出但我没有看到 world
如果我做其他类似的事情:
IO.puts "hello"
File.write("/tmp/temp.txt", "test")
IO.puts "world"
然后我看到hello 和world 并写入了一个文件。
我是否缺少关于 System.cmd 的特定内容导致出现这种情况?当它不在单独的进程中运行时它工作正常,因此它是进程和 System.cmd 的组合。
有什么想法吗?谢谢!
【问题讨论】:
-
您是否尝试过运行像
ls这样的更简单的命令,您知道它不会失败?也许wget失败,而不是System.cmd。 -
另外,您是否看到有任何记录?如果您遇到故障,您应该会在日志中看到条目。
-
“选择”中有什么?听起来 wget 正在等待一些输入或类似的东西,并且不知道您正在通过哪些选项,很难确定发生了什么。
-
@PatrickOscity - 当我运行 "ls", ["-la"] 时一切正常,但我在终端中看不到任何命令输出。但是,如果我尝试对 ls 的结果执行 IO.inspect ,那么它就会再次停止工作。
-
@JoséValim 很抱歉这个愚蠢的问题,但是当我运行 ExUnit 测试时如何检查日志?我以为终端只是输出了状态?