<p>您不希望按顺序运行到子进程命令。当您在命令行上运行<code>runmqsc</code>时,它接管<code>stdin</code>,执行您输入的命令,然后在您告诉它时退出。来自<a href="http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.ref.adm.doc/q083460_.htm" rel="nofollow">the docs</a>:</p>
<blockquote>
<p>By taking stdin from the keyboard, you can enter MQSC commands interactively.
By redirecting the input from a file, you can run a sequence of
frequently used commands contained in the file. You can also redirect
the output report to a file.</p>
</blockquote>
<p>但我认为还有第三种方法。启动<code>runmqsc</code>,将命令写入<code>stdin</code>,然后关闭<code>stdin</code>。它应该执行命令并退出。原来<a href="https://docs.python.org/3.6/library/subprocess.html#subprocess.Popen.communicate" rel="nofollow">^{<cd6>}</a>是为你做的。我不知道你是否想捕捉输出,但在这个例子中,我让它进入屏幕。在</p>
<pre><code># start msg queue manager
mqsc = subprocess.Popen(["runmqsc", "QMAGTRAQ01"], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# pass command(s) to manager and capture the result
out, err = mqsc.communicate("DISPLAY QL(BP.10240.012.REQUEST)")
# wait for command to complete and deal with errors
retcode = mqsc.wait()
if retcode != 0:
print(" ERROR ") # fancy error handling here
print("OUTPUT: ", out)
print()
print("ERROR: ", err)
</code></pre>
<p>在python3中,<code>out</code>和<code>err</code>是<code>bytes</code>对象,而不是字符串。与读取文本文件时使用编码类似,您可能必须根据程序使用的任何语言对其进行解码。假设文件是UTF8,那么你就可以了</p>
^{pr2}$