簡體   English   中英

Python2:使用Popen.communicate()編寫交互式過程的stdin,而無需尾隨換行符

[英]Python2: Writing to stdin of interactive process, using Popen.communicate(), without trailing newline

我正在嘗試編寫我認為簡單的實用程序腳本來調用不同的命令,但是Popen.communicate()似乎要添加換行符。 我想這是終止輸入,它與一個接受輸入並輸出的基本腳本一起工作,但是當其他程序是交互式的(例如bc )時,這會引起問題。

使用bc代替其他程序來復制最少的代碼(由於兩者都是交互式的,因此使其與bc一起使用應該可以解決問題):

#!/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)

打印('', '(standard_in) 1: syntax error\\n') ,可能是由附加的換行符引起的,因為將相同的字符串用管道輸送到外殼中的bc時, echo "2+2" | bc echo "2+2" | bc ,打印4就好了。

是否可以在不附加換行符的情況下使用Popen.communicate(),還是我需要使用其他方法?

我想我是個白痴,因為解決方案與我的想法相反:在輸入中添加換行符: stdout_data = p.communicate(input="2+2\\n")使腳本打印('4\\n', '') ,而不是給出錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM