有没有办法让Popen使用交互式命令?我的意思是nslookup,ftp,powershell ......我多次阅读整个子流程文档,但我找不到方法。
我所拥有的(删除项目中不感兴趣的部分)是:
from subprocess import call, PIPE, Popen
command = raw_input('>>> ')
command = command.split(' ')
process = Popen(command, stdout=PIPE, stderr=PIPE, shell=True)
execution = process.stdout.read()
error = process.stderr.read()
output = execution + error
process.stderr.close()
process.stdout.close()
print(output)
基本上,当我尝试使用dir
之类的命令打印输出时,输出是一个字符串,因此我可以使用.read()
。但是当我尝试使用nslookup
时,输出不是字符串,因此无法读取,并且脚本进入死锁状态。
我知道我可以在非交互模式下调用nslookup
,但这不是重点。我希望消除所有死锁的可能性,并使其适用于您可以在正常cmd
中运行的每个命令。
项目工作的真正方式是通过套接字,因此raw_input
是s.recv()
并且输出正在发回输出,但我已将其简化为专注于问题。