我创建了一个Python脚本,需要根据某些条件启动 .bat 文件。
Python脚本位置: \ Component \ myScript.py
批处理文件位置: \ Component \ MS20160825 \ toExecute.bat
批处理文件内部使用 \ Component \ bin \
我该怎么做:
从Python脚本启动.BAT文件,以便.BAT成功执行。 BAT文件应该能够在 \ Component \ bin \ 目录中找到可执行文件来执行其任务并产生所需的结果。
执行Python脚本执行,直到.BAT完成执行。
.BAT文件包含暂停> nul 语句。我需要绕过它,这意味着当从Python脚本执行.BAT时,它不应该等待用户按 Enter 而应该在执行第二个最后一个语句后正常终止。因为需要多次执行相同的.BAT文件。
答案 0 :(得分:2)
应该解决您遇到的所有问题!
import subprocess
p = subprocess.Popen('batch.bat', shell=True, stdin=subprocess.PIPE)
stdout, stderr = p.communicate()
答案 1 :(得分:2)
感谢所有人的积极建议 以下代码为我做了小修正:
import subprocess
batchFileLocation = 'Component\\MS20160825'
batchFileFullPath = os.path.join(batchFileLocation, 'toExecute.bat')
p = subprocess.Popen(os.path.abspath(batchFileFullPath), stdin=subprocess.PIPE, cwd = batchFileLocation)
stdout,stderr = p.communicate()
此处 cwd 参数非常重要,需要使用放置批处理文件的位置进行更新,然后只有批处理文件才能正确执行。
之后,只有批处理文件才能搜索执行所需的二进制文件(放在不同的目录,如本例中的 Component \ bin \ )。