【问题标题】:python subprocess module stuck while executing a batch filepython子进程模块在执行批处理文件时卡住了
【发布时间】:2018-07-06 00:45:07
【问题描述】:

我正在尝试自己学习使用 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脚本正在等待子进程在继续之前被终止?还是子进程中的问题开始? 先感谢您。

【问题讨论】:

    标签: python batch-file subprocess


    【解决方案1】:

    stdoutstderr需要使用subprocess.PIPE,否则无法通过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()
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多