【问题标题】:Calling a command line program调用命令行程序
【发布时间】:2013-12-12 21:17:40
【问题描述】:

我有一个可执行文件,双击时会在命令行窗口中打开。

现在在可执行 apame_win64.exe 所在的同一目录中有一个输入文件(即名为“sphere_15000.inp”)。所以我们可以在命令行中输入文件名。

问题是如何从mathematica 前端做到这一点?使用RunThrough 命令,我尝试执行此操作,但无济于事。

RunThrough["Executable Location", "sphere_15000"]

我是否需要将此文件位置放在我的 Windows 7 环境路径变量中?希望有这方面的建议。

更新

找到了解决我的问题的方法。

  1. 首先将 Mathematica 目录设置为可执行文件所在的文件夹。

    path="C:\Users\FlowCrusher\Desktop\CUSP 求解器\Apame_build_2011_01_09\solver"; 设置目录[路径];

  2. 然后使用以下样式的输入。

    运行["\"\"apame_win64.exe\" \"输入\"\""]

这里“apame_win64.exe”是要运行的可执行文件,“input”是可执行文件的输入文件。这解决了问题。但是愿望清单中有一个新项目。

有没有办法在后台隐藏控制台窗口?

这是它在我的屏幕上的外观。

正如 Chris 所建议的,如果我们在运行命令中使用最小化的控制台,我们会得到一个最小化的窗口,但程序不会执行。

希望有解决办法。

BR

【问题讨论】:

  • Windows 的Run 的一个问题(同样适用于RunThrough,它在Run 之上实现)对于Windows 来说,它不会正确处理包含空格的目录它们(实际上,这更多是底层 Windows shell 的问题)。我不止一次遇到这个问题,可能是你也遇到了这个问题。一般的出路是将路径用引号引起来。相关 MathGroup 线程:groups.google.com/group/comp.soft-sys.math.mathematica/…
  • 非常感谢@LeonidShifrin。这个链接很有帮助。
  • @Plato,尝试Run["start /min \"\"apame_win64.exe\" \"input\"\""] 最小化运行,甚至Run["cmd /c start /min \"\"apame_win64.exe\" \"input\"\""] - ref: computerhope.com/issues/ch000932.htm
  • @ChrisDegnen 在这种情况下它不起作用。控制台即将到来,并在没有执行外部程序的情况下最小化。
  • @ Plato - 问题似乎出在引号上。你确定你需要它们。文件名中没有任何空格。看看这是否有效:Run["start /min apame_win64 input"]

标签: command-line wolfram-mathematica


【解决方案1】:

是的,您可以将可执行文件的文件夹放入 Path 变量中,或者提供完整的路径名。

但是,RunThrough 似乎已被取代(在 Windows 上) Import["!command ","Text"],它将执行命令并将逗号和行输出作为字符串读入 Matheamtica。 例如:

Export["testit.txt", "bla", "Text"];
Import["!dir" <> " testit* > dir.log", "Text"];
FilePrint["dir.log"]

--

否则,我过去使用 NETLink 也有很好的结果(不确定 WScript.shell 是否 仍然适用于 Windows7/8 或者如果应该使用其他东西)。 模拟运行(我认为并不需要 RunThrough):

Run2[cmd_String] := Module[{shell},
    Switch[$OperatingSystem,
        "Windows",
            Needs["NETLink`"];
            shell = NETLink`CreateCOMObject["WScript.shell"];
            shell @ run[cmd,0,True],
        "Unix",
            Run @ cmd, 
        "MacOSX",
            Run @ cmd ] ];

【讨论】:

  • 应该的。我刚刚在 Windows 7 上试过这个: Run2["C:\\Windows\\explorer.exe"] 与 Run["start /min C:\\Windows\\explorer.exe"] 相比,它看起来更流畅(没有闪烁)
【解决方案2】:

您能否使用来自基本命令窗口而不是应用程序控制台的输入来运行您的应用程序?这可能是您需要的命令形式:

apame_win64 -input sphere_15000.inp

或者干脆

apame_win64 sphere_15000.inp

您可能可以通过运行apame_win64 -help 来检查可用的开关

可以从 Mathematica 运行多部分命令,例如

Run["type c:\\temp\\test.txt"]

或者,也将输出返回到 Mathematica 会话:

ReadList["!type c:\\temp\\test.txt", String]

【讨论】:

    【解决方案3】:

    我来到这里是想在 Windows 上运行 abaqus 命令行

    此处提供的解决方案适合我(Windows 7、Mathematica 9):

    SetDirectory@path;
    Run["start /min abaqus job=" <> fileName <> " interactive  ask_delete=OFF >> log.txt"]
    

    (这里 abaqus 选项 ask_delete=OFF 覆盖现有的模拟结果,>> 将所有输出重定向到文件)

    我认为,在您的情况下,最小化窗口没有运行,因为可执行文件会打开该窗口。在这种情况下,this 可能会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      相关资源
      最近更新 更多