Я не очень хорошо знаю Windows, поэтому это может объяснить мою дилемму ...
Я пытаюсь запустить bcdedit в Windows 2008R2 из Python 2.6.
Моя подпрограмма Python для запуска команды выглядит следующим образом:
def run_program(cmd_str):
"""Run the specified command, returning its output as an array of lines"""
dprint("run_program(%s): entering" % cmd_str)
cmd_args = cmd_str.split()
subproc = subprocess.Popen(cmd_args, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, shell=True)
(outf, errf) = (subproc.stdout, subproc.stderr)
olines = outf.readlines()
elines = errf.readlines()
if Options.debug:
if elines:
dprint('Error output:')
for line in elines:
dprint(line.rstrip())
if olines:
dprint('Normal output:')
for line in olines:
dprint(line.rstrip())
errf.close()
outf.close()
res = subproc.wait()
dprint('wait result=', res)
return (res, olines)
Я вызываю эту функцию так:
(res, o) = run_program('bcdedit /set {current} MSI forcedisable')
Эта команда работает, когда я набираю ее из окна cmd, и работает, когда я помещаю ее в командный файл и запускаю из окна командной строки (конечно, от имени администратора).
Но когда я запускаю его из Python (как администратор), Python утверждает, что не может найти команду, возвращая:
bcdedit is not recognized as an internal or external command,
operable program or batch file
Кроме того, если я пытаюсь запустить мой пакетный файл из Python (который работает из командной строки), он также завершится неудачно. Я также пробовал это с полным путем к bcdedit, с теми же результатами.
Что такое вызов bcdedit из Python, который делает его не найденным?
Обратите внимание, что я могу вызывать другие файлы EXE из Python, поэтому я уверен, что мой код Python нормален ... но кто знает.
Любая помощь будет наиболее ценной.