我有一个.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)
答案 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字符串的形式:
\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)
如果您只使用一行命令,并且您不需要断行\n
,os.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)