【问题标题】:Call a DOS executable file from Python从 Python 调用 DOS 可执行文件
【发布时间】:2012-04-30 05:03:41
【问题描述】:

抱歉,这个问题已经被问过很多次了。我有一个 DOS .exe 文件。通过在 Windows 中双击它可以很好地工作,这会在工作文件夹中生成一些输出文件。但是,我需要从 Python 调用它。 我尝试了以下命令(subprocess.Popen 和 os.system),但它只打开一个 DOS 窗口而不保存输出文件。那么有人可以给我一个提示吗?

谢谢!

代码

a=subprocess.Popen(r"I:/dosefile.exe")
a1=os.system(r"I:/dosefile.exe")

更新 它通过将.py 脚本文件放入包含dosefile.exe 的折叠中来工作。有没有办法让它在不迁移 .py 文件的情况下工作?

想办法。如果 .py 文件在其他地方,我需要使用 os.chdir() 更改工作文件夹

【问题讨论】:

  • 之前讨论过类似的问题。希望this 有所帮助。
  • 输出文件是什么意思?您是否正在尝试在您的 py 脚本所在的位置或dosefile.exe 所在的位置创建输出文件
  • 也许他想通过管道传输 STDOUT / STDERR 输出。
  • @anselm:输出文件是由dosefile.exe 自动创建的。所以我假设如果我可以从 python 调用这个 DOS exe,我应该有那些生成的输出文件。
  • os.system("I:/dosefile.exe") 应该可以工作。将你的 py 脚本复制到 I:/ 并运行 os.system("dosefile.exe")

标签: python


【解决方案1】:

尝试将其作为系统调用调用

import os
os.system('I:/dosefile.exe')

然后解析它创建的输出文件。

【讨论】:

  • 感谢您的建议。我试过这种方法。但是我的返回值是8,是不是说明dos文件没有被正确调用?
  • 在将 .py 脚本放入带有dosefile.exe 的文件夹后,它就可以工作了。谢谢!
【解决方案2】:

更好的办法是使用:

os.chdir('I:')

然后你可以使用 subrprocess。
os.system 非常有限,应该首选 subprocess.Popen。

更好的是使用 subprocess.Popen 关键字“cwd”,它设置工作目录。

subprocess.Popen(self, args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None,\
preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, \
startupinfo=None, creationflags)

Python 是一种易于练习的语言,像 os.system 这样的东西确实有效,因为 Python 非常宽容(不像 C...)。但是,我真的建议努力学习 Python 附带的更强大的工具。
以后你不会后悔的。

【讨论】:

  • 感谢您推荐子流程方法。我正在使用它。但是,我的 .exe 文件会生成一堆文件并将它们保存到我的硬盘中。有没有办法使用 stdout 将它们传递给 Python?
  • 您知道创建的文件的名称吗?如果这些是文本文件,那么在 Popen.communicate() 完成后阅读它们应该非常简单。
  • 是的,输出文件可以作为文本文件打开,我知道它们的名称。但是,我只有 100 多个,数量可以根据模拟的持续时间增加。
  • 如果每次你进行新的模拟,文件都在同一个目录中创建 os.listdir() 是你的朋友。 (你现在会使用 IPython 吗?如果没有……一定要了解……它会帮助你更快地学习 Python)
  • 非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 2022-10-21
  • 2016-02-25
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多