我试图独自学习使用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脚本在继续执行之前等待子进程终止,是否有办法杀死子进程?还是从子流程开始的问题? 先感谢您。
答案 0 :(得分:3)
您需要对subprocess.PIPE
和stdout
使用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