【问题标题】:Run a C# application from python script从 python 脚本运行 C# 应用程序
【发布时间】:2011-03-16 15:48:04
【问题描述】:

我刚刚用 C# 编写了一个大小合适的疾病传播模型。但是,我对 .NET 还很陌生,不确定如何继续。目前我只是双击 .exe 文件,模型从文本文件中导入配置设置,执行它的操作,并将结果输出到文本文件中。

接下来我想做的是编写一个 Python 脚本来执行以下操作:

  • 运行模拟 N 次 (N > 1000)
  • 每次运行后重命名输出文件并存储(即 ./output.txt -> ./acc/outputN.txt)
  • 聚合、解析和分析输出
  • 以某种干净的格式输出结果(可能是 excel)

迄今为止,我的大部分编程经验都是在 Linux 上使用 C/C++。我对最后两项相当有信心;但是,我不知道如何进行前两个。以下是一些我想提出建议的具体问题:

  • 从 python 脚本运行 C# .exe 的最简单/最佳方法是什么?
  • 有人对在 Windows 系统上使用 Python 执行文件系统操作的最佳方法有什么建议吗?

谢谢!

【问题讨论】:

  • 只是好奇,但为什么其余的都在 Python 中(而不是在 C# 中)?
  • 如果你正在寻找单元测试,试试 NUnit:nunit.org
  • @Henk:我想避免对模型本身进行更改。因此,做我想做的事需要编写一个新的应用程序/脚本。解决方案的性能并不重要,重要的是编写代码所花费的时间。我认为脚本语言会更好地解决脚本类型的问题。另外,我更喜欢python。 :)
  • 有点离题,但也许你可能会感兴趣。你有没有想过使用 IronPython?它允许您从 C# 运行 python 脚本(一些与 C 库相关的异常)。您还可以使用 IronPython 使用 .Net 框架。只是一个想法。

标签: python filesystems subprocess simulation


【解决方案1】:

您的问题的答案可以在 python 标准库的“os”中找到。可以在here找到执行各种操作的文档,例如处理文件和启动进程。

进程管理(运行你的C#程序)可以在here找到,文件操作是here

编辑:实际上,您应该使用subprocess module,而不是上面的过程链接。

【讨论】:

  • 啊,正是我需要的。我不敢相信我之前没有看到。非常感谢!
【解决方案2】:

从 Python 2.6+ 开始,您应该使用 subprocess 模块:(Docs)

import subprocess

for v in range(1000):
    cmdLine = r"c:\path\to\my\app.exe"
    subprocess.Popen(subprocess)
    subprocess.Popen(r"move output.txt ./acc/output-%d.txt" % (v))

【讨论】:

  • 啊哈,一个真正了解 python 而不是像我这样只看文档的人......触摸,这应该被标记为正确的。
  • 一个改进是使用os.rename而不是执行到move
  • 注意:subprocess 自 Python 2.4 起可用。 Popen 不会等待程序完成——它只是启动它,即move 命令运行得太快,除非app.exe 非常快。您可以使用subprocess.check_call 等待子进程结束
  • 一个问题:我可以在 linux 服务器上使用 C# 开发我的 .exe 文件并直接通过这样的 python 脚本运行它,还是需要通过 Mono 之类的东西?跨度>
  • @user2875994 所有这一切都是在使用 shell 执行 exe 文件。因此,如果您已使用诸如单声道之类的东西设置服务器,以便使用命令终端执行文件将运行它,那么它将起作用。否则,您可能必须使用 cmdLine = r"mono c:\path\to\my\app.exe" 并安装单声道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 2021-01-27
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多