【问题标题】:GNUPLOT vs. VBA - where did STDERR go?GNUPLOT 与 VBA - STDERR 去哪儿了?
【发布时间】:2017-12-08 15:55:23
【问题描述】:

我在 VBA 的范围内运行 Gnuplot,它运行得非常好。我能够使用 GNUPLOT 和 Word VBA 制作一整本书,其中包含大约一百张图表。 (使用 Excel 图表,我可以得到大约四个)

有一个小问题 - 在 VBA 下运行时,STDERR 消失了,或者没有被创建。没有诊断。

鉴于以下小型 GNUPLOT 脚本,

set key bmargin left horizontal Right noreverse enhanced autotitle box lt black linewidth 1.000 dashtype solid
set samples 800, 800
set title "Simple Plots" 
set title  font ",20" norotate
DEBUG_TERM_HTIC = 119
DEBUG_TERM_VTIC = 119
plot [-30:20] sin(x*20)*atan(x)

我的 VBA 代码将其写入临时文件并尝试运行它。 VBA 生成

"C:\temp\Gnuplot\bin\gnuplot.exe" C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E0.txt 2>"C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E2.err"

然后使用 Windows Shell 运行它,调用方式如下:

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")

然后

wsh.Run x, 0, True ' x contains the generated GNUPLOT expression

GNUPLOT 完美执行。

在 GNUPLOT 表达式中,第一项是 GNUPLOT 程序的位置,在我的系统上恰好是 "C:\temp\Gnuplot\bin\gnuplot.exe"。第二个文件是在微软官方位置C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E0.txt临时生成的。最后是 STDERR 的位置,2>"C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E2.err",其中 2> 表示这是 STDERR,而不是正常的输出 STDOUT。

现在假设我在 GNUPLOT 源代码中引入了故意错误,我希望写入的错误文件包含类似

scooby doo where are you?
^
"C:\Users\VVKozlov\AppData\Local\Temp\gnuEC55.txt", line 4: invalid command

在 VBA 之外使用通常的 CMD.EXE 执行时,STDERR 文件会按预期创建。

当使用 Windows Shell 在 VBA 范围内执行时,不会创建 STDERR 文件。

如何让这个 STDERR 文件在 VBA 下生成?

【问题讨论】:

  • CmdLine = "CMD /S/C """ & CmdLine & """"一样包装整个命令行。这些是神奇的词。
  • 谢谢,本。就是那些神奇的额外引号。
  • 在几位同事的坚持下,我添加了这个作品的一个版本,但作为 Excel 插件,添加到SourceForge

标签: vba excel vbscript gnuplot ms-word


【解决方案1】:

CreateObject("WScript.Shell").Run直接执行命令行。

输出重定向(您使用的2> 语法)是 cmd.exe Windows 命令处理器的一项功能。

你想做的是:

  1. 使用arguments 和您想要的重定向执行 cmd.exe。
  2. 请改用CreateObject("WScript.Shell").Exec,这样您就可以直接访问输入、输出和错误流。然后,如果您希望将内容记录到文件中,则需要 read from the stream 并将内容自己写入脚本中的文件。

【讨论】:

  • 变体 2 对我来说效果很好。我不需要明确说明将 STDERR 输出发送到何处。此外,错误消息以字符串形式出现在我面前,而无需显式创建和读​​取另一个文件。现在摆脱烦人的屏幕闪烁。
  • 最后,我使用了 Variant 1。对我编写的原始代码进行了很少的更改。
猜你喜欢
  • 2010-10-13
  • 1970-01-01
  • 2011-03-03
  • 2014-03-15
  • 2015-07-17
  • 2012-10-30
  • 2013-05-23
  • 1970-01-01
  • 2012-03-13
相关资源
最近更新 更多