执行批处理文件时,python子进程模块卡住了

时间:2018-07-06 00:45:08

标签: python batch-file subprocess

我试图独自学习使用python进行编码,但是遇到了问题。

我正在使用python的子进程模块执行.bat文件,但是该进程似乎卡在了bat文件中。 python代码当前如下所示:

import  getpass
username = getpass.getuser()
from subprocess import Popen
p = Popen("hidefolder.bat", cwd=r"C:\Users\%s\Desktop" % username)
stdout, stderr = p.communicate()
import sys
sys.exit()

.bat文件如下所示:

if exist "C:\Users\%username%\Desktop\HiddenFolder\" (
    attrib -s -h "HiddenFolder"
    rename "HiddenFolder" "Projects"
    exit
    )
if exist "C:\Users\%username%\Desktop\Projects\" (
    rename "Projects" "HiddenFolder"
    attrib +s +h "HiddenFolder"
    exit
    )
if not exist "C:\Users\%username%\Desktop\HiddenFolder\" (
    mkdir "C:\Users\%username%\Desktop\HiddenFolder\"
    )
exit

即使python脚本在继续执行之前等待子进程终止,是否有办法杀死子进程?还是从子流程开始的问题? 先感谢您。

2 个答案:

答案 0 :(得分:3)

您需要对subprocess.PIPEstdout使用stderr,否则将无法通过Popen.communicate来获取它们,这就是您的进程卡住的原因。

from subprocess import Popen, PIPE
import  getpass
username = getpass.getuser()
p = Popen("hidefolder.bat", cwd=r"C:\Users\%s\Desktop" % username, stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
import sys
sys.exit()

答案 1 :(得分:1)

我是一名新程序员,但我可以通过编写下面的代码来解决我的问题。

import subprocess
subprocess.call([r'ProcurementSoftwareRun.bat'])
print ('Software run successful')

我的 bat 文件是这样的:

@ECHO OFF
cmd /c start "" "C:\Program Files (x86)\UserName\ERPModule\PROCUREMENT.exe
exit