【发布时间】:2011-01-05 06:54:13
【问题描述】:
我在使用 subprocess.Popen.communicate() 时遇到了一个奇怪的问题。作为背景,我想从我的 python 脚本中执行一个应用程序。当我从命令行运行程序时,我会这样做(UNIX):
$ echo "输入文本" | /path/to/myapp从我的脚本中,我还想将输入通过管道传输到应用程序中。所以,我尝试了以下方法。但是当我尝试使用communicate() 发送输入时出现“管道损坏”错误:
>>> cmd = ['/path/to/myapp'] >>> p = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,stdin=subprocess.PIPE) >>> out,err = p.communicate('输入文本') 回溯(最近一次通话最后): 文件“”,第 1 行,在 文件“/usr/lib/python2.5/subprocess.py”,第 670 行,在通信中 返回self._communicate(输入) _communicate 中的文件“/usr/lib/python2.5/subprocess.py”,第 1223 行 bytes_written = self._write_no_intr(self.stdin.fileno(), buffer(input, input_offset, 512)) _write_no_intr 中的文件“/usr/lib/python2.5/subprocess.py”,第 1003 行 返回 os.write(fd, s) OSError:[Errno 32] 损坏的管道为了让事情变得更奇怪,如果我遗漏输入数据,我不会收到任何错误。但是,这并不是一个很好的解决方法,因为应用程序需要输入才能工作。
>>> p = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,stdin=subprocess.PIPE) >>> out,err = p.communicate() >>> 打印出来 [myapp 关于缺少输入的错误]知道我错过了什么吗?
【问题讨论】:
标签: python