<p><code>flush</code>编写命令时的管道(并包含新行,以模拟按Enter键的用户输入,假设程序期望如此),完成后<code>close</code>管道。一般来说,避免<code>shell=True</code>也是一个好主意,因为它引入了包装命令的附加层(在除此之外的其他情况下,会增加安全性和稳定性问题)。尝试:</p>
<pre><code>#!/usr/bin/env python
import subprocess
import time
# Use list form of command to avoid shell=True, and raw string to allow
# safe use of "normal" looking Windows-style path
# Include universal_newlines=True automatic str decoding in Py3; it might
# fix newlines on Py2 as well, but if not, you'll need to explicitly send
# \r\n instead of just \n to match OS conventions (or use os.linesep to autoselect)
p = subprocess.Popen([r"C:\Users\Raja\Documents\SUMO_Final\rcmSampleApp.exe", "-u", "COM4"],
stdin=subprocess.PIPE, universal_newlines=True)
p.stdin.write('104\n') # Include newline that manual entry includes
p.stdin.flush() # Ensure write not buffered
time.sleep(5)
p.stdin.write('q\n') # Include newline
p.stdin.close() # Flush and close stdin, so program knows no more input coming
p.kill() # Depending on program, p.join() might be enough
</code></pre>
<p>假设<code>p.join()</code>起作用,您可以将最后三行(<code>write</code>,<code>close</code>和{<cd7>}/<code>join</code>)替换为:</p>
^{pr2}$
<p>它将隐式地执行所有三个任务。在</p>