Как открыть файл .exe (не в командной строке Windows) и отправить ему команды? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь открыть исполняемый файл и хотел бы отправить ему команды после открытия этой командной строки этой конкретной программы. Я хотел бы написать сценарий Python для этого. Извините, но я новичок в питоне.

Я попытался открыть этот исполняемый файл с помощью подпроцесса, но я могу это сделать, однако я не уверен, как отправлять ему команды. Я поделюсь своим кодом, а также.

from subprocess import Popen, PIPE

p = Popen(r"C\Dpcmd.exe", stdin=PIPE)
p.communicate("dpcmd")

Я провел некоторое исследование, и команда, которая должна быть отправлена, должна быть dpcmd, верно?

Но это ошибка, которая появляется, если я запускаю ее через командную строку Windows.

Traceback (most recent call last):
File "dpcmd.py", line 4, in <module>
p.communicate("dpcmd")
File "C:\Python\lib\subprocess.py", line 924, in communicate
self._stdin_write(input)
File "C:\Python\lib\subprocess.py", line 873, in _stdin_write
self.stdin.write(input)
TypeError: a bytes-like object is required, not 'str'

1 Ответ

0 голосов
/ 23 мая 2019

Предполагается, что вопрос о том, что здесь задокументировано: https://www.eltan.com/images/brochures/sf/dp_sf_manual.pdf,, где dpcmd задокументировано, начиная со страницы 35, похоже, что это обычная неинтерактивная программа командной строки.

Некоторая путаница может возникнуть из-за использования альтернатив

Программное обеспечение командной строки окна DediProg выполняется файлом «dpcmd.exe». Там три разных способа запуска командной строки dos.

  1. Дважды щелкните значок «dpcmd» на рабочем столе, введите dpcmd и введите.
  2. Измените каталог dos на то же место, где находится «dpcmd.exe». C: \ program files \ dediprog \ SF100
  3. Введите следующую команду, чтобы автоматически направить команду dpcmd в «dpcmd.exe» место.
    Установить путь =% path%; ”c: \ program files \ dediprog \ SF100

, где первая альтернатива предполагает, что на вашем рабочем столе есть значок «dpcmd», но это, вероятно, просто делает то, что делает третий вариант, настраивая командную строку, где dpcmd.exe находится в пути поиска.

Исходя из варианта 2, сама программа не зависит от того, находится ли она в пути, и, таким образом, вы сможете запустить свою задачу перепрошивки как

from subprocess import Popen, PIPE

p = Popen("\"c:\\program files\\dediprog\\SF100\\dpcmd.exe\" -u\"c:\\<path to bio.bin>\\bio.bin\"")

или с немного меньшим количеством кавычек при построении командной строки из списка:

p = Popen(["c:\\program files\\dediprog\\SF100\\dpcmd.exe","-uc:\\<path to bio.bin>\\bio.bin"])

Popen изменяет текущий каталог на каталог исполняемого файла, поэтому необходим полный путь к bio.bin (в обоих случаях).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...