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