【问题标题】:How to run a .bat file in DOSbox with Python?如何使用 Python 在 DOSbox 中运行 .bat 文件?
【发布时间】:2016-06-18 08:16:12
【问题描述】:

我需要使用DOSbox模拟器来运行一个.bat文件

但我不知道在 python 中实现我必须遵循的所有步骤。这是我的尝试:

import os
commands = ['""C:\Program Files (x86)\DOSBox-0.73\dosbox.exe""',
            'mount c c:\Users\g\Desktop',
            'C:',
            'run_t2d.bat']

for i in commands:
    os.system(i)

使用第一个元素运行 DOSbox 控制台,但随后它无法识别其他 2 个命令。

'mount' is not recognized as an internal or external command,
operable program or batch file.
'run_t2d.bat' is not recognized as an internal or external command,
operable program or batch file.

可能与不同的子流程有关。当然,如果我自己运行控制台并输入完全相同的命令,它会起作用

【问题讨论】:

  • 在这种情况下os.curdir 是什么?
  • 我认为这是 Windows?
  • 为什么你认为其他命令会在 DOSbox 中运行?
  • 为什么第一个命令两边有双引号——试试'"C:\Program Files (x86)\DOSBox-0.73\dosbox.exe"', 另外,mount 不是 DOS(或 Windows)命令。
  • @martineau DOSbox 是否有作为命令标志,他们可能试图用mount 行提供?

标签: python windows dosbox


【解决方案1】:

实际上,您甚至不需要 Python。您需要运行 Dosbox,并传入一个 -conf 参数,该参数指向一个配置文件,其中包含您在自动执行部分中所需的命令。

因此,如果您在与批处理文件相同的目录中创建一个名为 run_t2d.conf 的配置文件,如下所示:

[autoexec]
mount c c:\Users\g\Desktop
C:
run_t2d.bat

那么当你启动dosbox时:

C:\Program Files (x86)\DOSBox-0.73\dosbox.exe -conf C:\Users\G\Desktop\run_t2d.conf

当然,如果你愿意,你可以在你的 python 脚本中调用它。

【讨论】:

  • 不幸的是,这只是 python 例程中的一小部分,因此必须在 python 中完成。我试图创建 -conf 文件,然后从 python 调用它,但没有成功。 os.system('""C:\Program Files (x86)\DOSBox-0.73\dosbox.exe -conf C:\Users\G\Desktop\run_t2d.conf""') 或 os.system('""C :\Program Files (x86)\DOSBox-0.73\dosbox.exe ""'+"-conf C:\Users\G\Desktop\run_t2d.conf")
  • dos 框屏幕上显示什么?和你正常打开的时候有什么不同吗?
  • 试试os.system(r'""C:\Program Files (x86)\DOSBox-0.73\dosbox.exe" -conf "C:\Users\G\Desktop\run_t2d.conf""')。这使用原始字符串来避免创建控制字符,例如"\r"(回车);将两个文件路径都用双引号括起来(第二个路径在技术上不需要,因为它没有空格);并将整个命令用引号括起来,以解决cmd /c 如何解析命令行的遗留问题。
  • 但是你不需要 cmd shell 并且可以使用subprocess.call(r'"C:\Program Files (x86)\DOSBox-0.73\dosbox.exe" -conf "C:\Users\G\Desktop\run_t2d.conf"')
  • 真棒@eryksun。你得到了解决方案。非常感谢 Shane Haw。
【解决方案2】:

您可以使用-c option to DOSBox 指定要作为参数运行的命令,而无需创建配置文件。例如:

import subprocess

dosbox_exe = r'C:\Program Files (x86)\DOSBox-0.73\dosbox.exe'
dosbox_args = [r'mount c c:\Users\g\Desktop',
           'C:',
           'run_t2d.bat']

def run_dosbox(args):
    return subprocess.call(reduce(lambda x, y: x + ["-c"] + [y],
                                  args, [dosbox_exe]))

run_dosbox(dosbox_args)

我使用了subprocess.call 而不是os.system,因为它会在必要时自动处理引用参数。

【讨论】:

  • @eryksun 它会自动处理以 DOSBox 期望的形式引用参数。
  • 有没有办法向dosbox中打开的程序(bat文件)发送击键?
猜你喜欢
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2010-11-09
  • 2016-05-29
  • 1970-01-01
  • 2019-01-20
相关资源
最近更新 更多