我需要調用進程中的交互式程序並在進程運行時打印其輸出。到目前爲止,我與這個功能做:如何調用交互式程序並立即顯示輸出
def call(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
line = process.stdout.readline().rstrip().encode("utf-8")
if line == '':
break
print(line)
process.wait()
return process.returncode
的問題是,交互式程序可以等待用戶輸入和問題後,不會增加新的線路,例如:
認證領域:...> ...
用戶名:
後 「用戶名」,有沒有新的生產線和程序期望的用戶輸入,所以我的代碼d oes不顯示「用戶名:」。
而不是readline()我需要一些像bytesavailable和read(size)這樣的函數,但是沒有像bytesavaiable()這樣的函數。
改爲使用'communic'。它也避免了緩衝問題(由於管道已滿而導致程序卡住)。 – Cameron 2013-02-11 00:13:35
@Cameron'communic'只有在程序終止前不需要輸出時纔有效(因爲它只在處理完成後才返回)。 – Amber 2013-02-11 00:14:28
@Amber:嗯,我可以發誓它是非阻塞的,但文檔顯示你是對的:-) – Cameron 2013-02-11 00:53:20