os.системные команды

Я разрабатываю программу, которая должна использовать os.system из-за старых ограничений Python. В настоящее время я застрял в одном маленьком пятне.

os.system("C:\\FIOCheck\\xutil.exe  -i get phy" +HBEA + ">C:\\FIOCheck\\HBEAResult.txt")

Это кусок кода, который я пытаюсь проработать. Он получит доступ к внешней программе, которая имеет некоторые параметры. HBEA — это переменная, которую я пытаюсь передать (которая получена ранее в программе). Затем программа берет все, что создано .exe, и передает его во внешний файл. На данный момент переменная HBEA не передается в командную строку, поэтому .exe никогда не запускается, что приводит к тому, что .txt остается пустым. Поскольку файл пустой, я не могу получить из него данные и, следовательно, не могу завершить программу.

Любые идеи?

РЕДАКТИРОВАТЬ: Итак, я попытался использовать следующий код в соответствии с некоторыми предложениями:

cmd = "C:\\FIOCheck\\xutil.exe  -i get phy " +HBEA + ">C:\\FIOCheck\\HBEAResult.txt"
print cmd
os.system(cmd)

Был сгенерирован следующий вывод:

50012BE00004BDFF  #HBEA variable
C:\FIOCheck\xutil.exe  -i get phy 50012BE00004BDFF>C:\FIOCheck\HBEAResult.txt #the cmd  var

Однако это все еще не передает значение. Не слишком ли длинная переменная HBEA?

РЕШЕНО

Эта программа работала с некоторыми правками из лучшего ответа. Команды передавались правильно, однако то, как я их отформатировал, было неверным. Новое форматирование выглядит так:

cmd = "C:\\FIOCheck\\xutil.exe -i " + HBEA + " get ver" + ">C:\\FIOCheck\\HBEAResult.txt"
os.system(cmd)

Спасибо за помощь!


person Matt    schedule 17.07.2012    source источник
comment
Вы хотите соединить 'phy' с содержимым HBEA без пробелов между ними? Когда я устанавливаю значение для HBEA, оно объединяется с вашей строкой, поэтому неясно, где вы теряете значение для этой переменной. Можете ли вы распечатать его непосредственно перед созданием этой команды?   -  person Levon    schedule 17.07.2012
comment
Я хочу иметь возможность успешно передать HBEA в командную строку. В настоящее время команда работает нормально, но отсутствует переменная HBEA.   -  person Matt    schedule 17.07.2012
comment
Сначала я бы распечатал значение HBEA отдельно, затем отдельно построил бы командную строку (cmd) и распечатал ее для проверки, а затем вызвал бы os.system(cmd)   -  person Levon    schedule 17.07.2012
comment
Привет, Левон, я попробовал и получил следующее: 50012BE00004BDFF C:\FIOCheck\xutil.exe -i get phy 50012BE00004BDFF ›C:\FIOCheck\HBEAResult.txt Это правильно, однако номер по-прежнему не передается командная строка. Он все еще отсутствует.   -  person Matt    schedule 17.07.2012
comment
то, как у вас есть код прямо сейчас, вы получите phy50012BE00004BDFF .. не phy 50012BE00004BDFF, так что, возможно, вы что-то изменили. Кроме того, просто добавьте '\n' к вашей строке. Это не должно иметь значения, но все равно попробуйте.   -  person Levon    schedule 17.07.2012
comment
Переменная HBEA определенно не слишком длинная. Возможно, параметр командной строки предназначен для передачи в виде строки, т.е. в двойных кавычках?   -  person Levon    schedule 17.07.2012
comment
Если я это сделаю, не будет ли HBEA просто передан как строка HBEA вместо числа?   -  person Matt    schedule 17.07.2012
comment
Да, некоторые программы могут ожидать, что их командная строка будет представлена ​​в виде строк. Я не знаком с программой, которую вы запускаете. Я бы также добавил еще несколько пробелов к ` › C:\...` для удобочитаемости. Я думаю, что у меня нет идей для удаленного устранения неполадок, надеюсь, у кого-то есть решение.   -  person Levon    schedule 17.07.2012
comment
несколько более удобный фрагмент для замены os.system, который я использую фрагмент, как здесь stackoverflow.com/a/ 18663914/544463   -  person Yauhen Yakimovich    schedule 06.09.2013


Ответы (1)


os.system("C:\\FIOCheck\\xutil.exe  -i get phy" +HBEA + ">C:\\FIOCheck\\HBEAResult.txt")

должно ли это быть

os.system("C:\\FIOCheck\\xutil.exe  -i get phy " +HBEA + ">C:\\FIOCheck\\HBEAResult.txt")

и вы всегда можете сначала построить строку

cmd = "C:\\FIOCheck\\xutil.exe  -i get phy " +HBEA + ">C:\\FIOCheck\\HBEAResult.txt"
print cmd
os.system(cmd)
person nate_weldon    schedule 17.07.2012
comment
Это в значительной степени резюмирует оба моих комментария выше. - person Levon; 17.07.2012
comment
Кажется, это первые две вещи, с которыми я сталкиваюсь, когда использую команду os. - person nate_weldon; 17.07.2012
comment
Итак, я повозился с этим и попробовал этот шаг. Однако на выходе все работает хорошо, но по какой-то причине я все еще не передаю переменную HBEA. Пример вывода: 50012BE00004BDFF C:\FIOCheck\xutil.exe -i get phy 50012BE00004BDFF ›C:\FIOCheck\HBEAResult.txt - person Matt; 17.07.2012
comment
Нейт — он извлекается из другого файла, который создает его как 50012BE:00004BDFF. Я просто извлекаю : и затем передаю это значение. - person Matt; 17.07.2012