Выполнение команд Python в командной строке (taskkill)

Я пытаюсь использовать os.system для использования команды taskkill в командной строке. плохо выпотрошить единственную часть, с которой у меня проблемы:

os.system('taskkill /s %s /u CORP\Administrator /p CLARiiON! /pid AxAuto.exe'%(connection[i]))

Переменная connection[i] — это просто IP-адрес удаленного компьютера в той же сети. Я могу запустить эту команду прямо из командной строки локально и просто напрямую ввести IP-адрес, и я точно знаю, что это сработает, но запуск команды через Python в этом формате возвращает «> в это время было неожиданно». Я делаю глупую ошибку форматирования в этой строке кода? ошибку можно увидеть ниже: › был неожиданным в это время.


EDIT: мне также сказали использовать модуль Subprocess. я попробовал фрагмент ниже:

command="taskkill /s %s /u CORP\Administrator /p CLARiiON! /im AxAuto.exe"%(connection[i]))
subprocess.Popen(command, stdout= subprocess.PIPE, stdin = subprocess.PIPE, stderr=subprocess.PIPE)

Это не дает сбоя в сценарии, но также не убивает процесс.


person bladexeon    schedule 23.04.2015    source источник
comment
Вы можете указать точную ошибку, которую вы получаете? Является ли ошибка ошибкой Windows или ошибкой Python? Также вы можете использовать модуль subprocess вместо os.system.   -  person notorious.no    schedule 23.04.2015
comment
@notorious ошибка, которую я получаю, отображается в окне скрипта Python, обратного следа нет, он только говорит, что › было неожиданно в это время. когда он выполняет команду   -  person bladexeon    schedule 23.04.2015
comment
@bladexeon Надеюсь, вы знаете, что разместили пароль в своем коде Python! ;-)   -  person ρss    schedule 23.04.2015
comment
Аргумент /pid должен быть целым числом. Вы можете использовать /img для имени образа процесса. microsoft.com/ ресурсы/документация/windows/xp/all/proddocs/   -  person ρss    schedule 23.04.2015
comment
@pss Но я использовал имя процесса в обычной командной строке Windows, и он работал, говоря, что процесс xxx был убит или что-то в этом роде, поэтому я знаю, что это сработает.   -  person bladexeon    schedule 23.04.2015


Ответы (1)


Попробуйте что-то вроде кода ниже:

from subprocess import call

call(['taskkill', '/s', connection[i], '/u', 'CORP\Administrator', '/py',
      'CLARiiON!', '/pid', 'AxAuto.exe'])
person notorious.no    schedule 23.04.2015
comment
Этот дал мне: raise TypeError("This object does not support enumeration") - person bladexeon; 23.04.2015
comment
Это может быть вызвано connection. Что вы получите, распечатав connection[i] - person notorious.no; 23.04.2015
comment
Ага! дает мне это: <_wmi_namespace: ,COMObject <unknown>>> это происходит из другой части кода ... также что-то, что я понятия не имею, как исправить - person bladexeon; 23.04.2015
comment
Я не думаю, что вам нужно это исправлять, вам просто нужно выяснить, как получить IP-адрес от этого объекта или даже если это возможно. - person notorious.no; 23.04.2015
comment
Я понял ошибку, связанную с тем, что я использовал переменную соединения WMI вместо необработанной переменной IP, и она работала с подпроцессом. Спасибо большое! - person bladexeon; 23.04.2015