我正在尝试打开一个可执行文件,并希望在打开该特定程序的命令行后向其发送命令。我想为此编写一个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'
答案 0 :(得分:0)
假设问题在于此处记录的内容:https://www.eltan.com/images/brochures/sf/dp_sf_manual.pdf,其中dpcmd
是从第35页开始记录的,它似乎是一个常规的非交互式命令行程序。
某些用法可能会引起混淆
DediProg窗口dos命令行软件由文件“ dpcmd.exe”执行。 有三种不同的方式来运行dos命令行。
- 双击桌面上的“ dpcmd”图标,然后输入dpcmd并输入。
- 将您的dos目录更改为“ dpcmd.exe”所在的位置。 C:\ program files \ dediprog \ SF100
- 键入以下命令以自动将dpcmd命令定向到“ dpcmd.exe” 位置。
设置path =%path%;” c:\ program files \ dediprog \ SF100
第一种选择建议您的桌面上有一个名为“ 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
的完整路径的原因。