【问题标题】:Running external command using python 2.7 in Windows在 Windows 中使用 python 2.7 运行外部命令
【发布时间】:2015-06-13 15:24:49
【问题描述】:

我是 python 的新手用户,在使用命令行开关执行外部命令时遇到问题(在 Windows 8 64 位中使用 python 2.7):

lammpsExe = 'C:/Program Files (x86)/LAMMPS 32-bit 20150403/bin/lmp_serial.exe'
os.system(lammpsExe + " -in in.lmps")

它给出以下错误消息:

“C 程序”不是内部或外部命令、可运行程序或批处理文件

os.system 似乎无法理解 lammpsExe 的字符串路径。 然后我尝试了 subprocess.call 并将路径中的 '/' 替换为 '\\' :

lammpsExe = 'C:\\Program Files\\LAMMPS 64-bit 20150330\\bin\\lmp_serial.exe'
subprocess.call([lammpsExe,'-in in.lmps'], shell=True)

但它仍然不起作用,因为命令提示符会发出以下警告:

IndentationError: 意外缩进

我怀疑命令行开关 '-in' 是问题所在。我尝试了 "'、\ 和 / 的各种组合,但仍然收到错误消息。

【问题讨论】:

  • 您需要在包含嵌入空格的路径周围加上双引号:即'"C:/Program Files (x86)/LAMMPS 32-bit 20150403/bin/lmp_serial.exe"'
  • @martineau 它仍然不起作用,即使有以下变体:
  • 即使它不能解决你的全部问题,但它绝对是你需要做的事情。尝试从命令提示符中想出一些可行的方法,然后将其转换为os.system() 调用。

标签: python windows python-2.7 path external-process


【解决方案1】:

subprocess 文档有一个标题为替换 os.system() 的部分:

status = os.system("mycmd" + " myarg")
# becomes
status = subprocess.call("mycmd" + " myarg", shell=True)

我建议:

lammpsExe = 'C:\\Program Files\\LAMMPS 64-bit 20150330\\bin\\lmp_serial.exe'
subprocess.call(lammpsExe + ' -in in.lmps', shell=True)

文档确实注意到“通常不需要通过 shell 调用程序。”

【讨论】:

  • 我试过了,还是不行。我仍在尝试通过命令提示符测试各种字符串命令,但仍然没有成功
  • 只是一个想法@ocean-flyer,从命令行运行"C:\Program Files\LAMMPS 64-bit 20150330\bin\lmp_serial.exe" -in in.lmps 是否符合您的预期?
  • 我正在尝试基于输入文件 (in.lmps) 执行模拟程序 (Lammps)。我可以轻松地从命令提示符执行此操作,但我需要为 125 个不同的输入文件(具有相同文件名但位于不同文件夹中)执行此操作,而 python 是执行此操作的最佳方法。
【解决方案2】:

我想我已经找到了解决方案。而不是试图在python脚本中为外部命令定义路径,我只需要将路径放在Windows系统变量中,然后直接在脚本中调用命令:

subprocess.call(['lmp_serial.exe','-in','in.lmps'],shell=True)

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 1970-01-01
    • 2020-10-31
    • 2022-11-02
    • 2013-01-31
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    相关资源
    最近更新 更多