Модуль подпроцесса python застрял при выполнении командного файла - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь научиться самостоятельно писать код на 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 ожидает завершения дочернего процесса, прежде чем продолжить? Или проблема в дочернем процессе для начала? Заранее спасибо.

1 Ответ

0 голосов
/ 06 июля 2018

Вам нужно использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...