如何从python脚本中打开.cmd文件

时间:2018-06-05 12:22:01

标签: python python-3.x

我有一个.cmd文件,我想从python脚本中打开它。当我打开它时,.cmd文件(转换器)完成其工作,而不需要在命令窗口中进行任何进一步的交互。这意味着我只需要从我的脚本中打开它,就是这样。

我尝试了以下内容......

from subprocess import check_output

def convert():
    subprocess.Popen(['[path to the .cmd file]')

...但它只打开cmd窗口几分之一秒,我想运行的实际.cmd文件不会被执行。如何更改以打开路径后面的.cmd文件?

更新

from subprocess import Popen, PIPE

def convert():
    process = Popen("cmd.exe", shell=False, universal_newlines=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    commands = r"C:\\CONVERTER\MFD2MAT\\convert.cmd\n"
    out, err = process.communicate(commands)

2 个答案:

答案 0 :(得分:1)

我将尝试重复解释:

第一种方法:

from subprocess import Popen, PIPE 

process = Popen("cmd.exe", shell=False, universal_newlines=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)


commands = "C:\\Users\\praktikant3\\TESTING.cmd\n" #you can use " " for 1 line of commands or '''  ''' for several lines
out, err = process.communicate(commands)
print(out)

在制定命令时,请记住您的命令 因此,以python字符串的形式:

  • 确保逃离路径中的前/后斜线:C:\ .. => C:\\ ..
  • \n添加到字符串的末尾,以表示执行命令的换行符。

在我的代码中,如果使用print(out),则只能看到输出,但cmd文件无论如何都会运行。

第二种方法:

import sys
import os
def run_command(command):
    print("Running command: {}".format(command))
    os.system(command)

commands = "C:\\Users\\praktikant3\\TESTING.cmd"
run_command(commands)

如果您只使用一行命令,并且您不需要断行\nos.system为您执行此操作,则此操作非常简洁。此外,os.system会在 IDE 中显示输出,而无需打印任何内容。

答案 1 :(得分:0)

我的cmd文件无法使用" Anaconda-Prompt"

解决方案(来自@zwer) 如果这是问题,您可以在子流程的子流程中执行命令:

subprocess.call(["cmd", "/k", "start", "", "C:\\CONVERTER\\MFD2MAT\\convert.cmd"], stderr=subprocess.STDOUT) 

但如果它因路径而失败,你可能只想提供一个cwd参数并完成它,即:

 subprocess.call("convert.cmd", cwd="C:\\CONVERTER\\MFD2MAT", stderr=subprocess.STDOUT, shell=True)