如何打开.exe(不是Windows命令行)文件并将命令发送给它?

时间:2019-05-23 08:00:00

标签: python subprocess

我正在尝试打开一个可执行文件,并希望在打开该特定程序的命令行后向其发送命令。我想为此编写一个python脚本。抱歉,但是我是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 :(得分:0)

假设问题在于此处记录的内容:https://www.eltan.com/images/brochures/sf/dp_sf_manual.pdf,其中dpcmd是从第35页开始记录的,它似乎是一个常规的非交互式命令行程序。

某些用法可能会引起混淆

  

DediProg窗口dos命令行软件由文件“ dpcmd.exe”执行。   有三种不同的方式来运行dos命令行。

     
      
  1. 双击桌面上的“ dpcmd”图标,然后输入dpcmd并输入。
  2.   
  3. 将您的dos目录更改为“ dpcmd.exe”所在的位置。   C:\ program files \ dediprog \ SF100
  4.   
  5. 键入以下命令以自动将dpcmd命令定向到“ dpcmd.exe”   位置。
      设置path =%path%;” c:\ program files \ dediprog \ SF100
  6.   

第一种选择建议您的桌面上有一个名为“ dpcmd”的图标,但这大概是第三种选择,即在搜索路径中设置dpcmd.exe的命令提示符。

基于选择2,程序本身并不依赖于路径,因此您应该能够以以下方式启动Flash任务

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的完整路径的原因。