Python2:使用Popen.communicate()将交互进程的stdin写入,不带换行符

Python2:使用Popen.communicate()将交互进程的stdin写入,不带换行符,python,stdin,Python,Stdin,我试图编写一个简单的实用程序脚本来调用不同的命令,但是Popen.communicate()似乎附加了一个换行符。我想这是为了终止输入,它与一个基本脚本一起工作,该脚本接收输入并将其打印出来,但当另一个程序是交互式的(例如,bc)时,它会导致问题 使用bc代替其他程序(因为两者都是交互的,让它与bc一起工作应该可以解决问题),以最少的代码进行复制: 这将打印(“”,”(标准)1:syntax error\n'),这可能是由附加的换行符引起的,因为将相同的字符串传输到外壳中的bc,echo“2+2

我试图编写一个简单的实用程序脚本来调用不同的命令,但是Popen.communicate()似乎附加了一个换行符。我想这是为了终止输入,它与一个基本脚本一起工作,该脚本接收输入并将其打印出来,但当另一个程序是交互式的(例如,
bc
)时,它会导致问题

使用bc代替其他程序(因为两者都是交互的,让它与bc一起工作应该可以解决问题),以最少的代码进行复制:

这将打印
(“”,”(标准)1:syntax error\n')
,这可能是由附加的换行符引起的,因为将相同的字符串传输到外壳中的bc,
echo“2+2”| bc
,打印的
4
很好


是否可以在不添加换行符的情况下使用Popen.communicate(),或者我需要使用其他方法?

我想我是个白痴,因为解决方案与我的想法相反:在输入中添加换行符:
stdout\u data=p.communicate(input=“2+2\n”)
使脚本打印
('4\n','')
,而不是给出错误

#!/usr/bin/env python
from subprocess import Popen, PIPE

command = "bc"
p = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout_data = p.communicate(input="2+2")
print(stdout_data)