【发布时间】:2020-06-18 14:13:45
【问题描述】:
让我解释一下情况。我正在执行 tibemsadmin.exe 作为子进程。 一旦子进程启动,我需要通过管道传输 3 个命令。 1.“连接” 2.用户名是'' 3.密码是''
import subprocess as sp
process=sp.Popen('tibemsadmin',cwd='C:/tibco/ems/8.5 - Copy/bin',shell=True, stdout=sp.PIPE, stdin=sp.PIPE, stderr=sp.STDOUT)
process.stdin.write(b'connect\n')
process.stdin.write(b'\n')
process.stdin.write(b'\n')
stdout=process.communicate()
print(stdout)
cmd.terminate()
进程没有输入密码。它用于用户输入。听到卡住了
C:\Users\user\Desktop\TIBCO>py cmd_popen.py 密码:
【问题讨论】:
-
stdout=process.communicate()。这是错误的。使用元组解包,std_out,std_err=process.communicate() -
同意 Adam,在致电
process.communicate()之前,process.stdin.close()也有帮助吗?密码可能位于管道的父级输出缓冲区中。 -
您也可以使用
communicate传递输入:stdout, stderr = process.communicate(b'connect\n\n\n')。 但是,请确保tibemsadmin实际上是从标准输入读取凭据,而不是直接从终端读取。 -
这看起来可能会有所帮助:support.tibco.com/s/article/…
-
问题解决了吗?
标签: python passwords subprocess